日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

病毒(信息学奥赛一本通-T1396)

發布時間:2025/3/17 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 病毒(信息学奥赛一本通-T1396) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

有一天,小y突然發現自己的計算機感染了一種病毒!還好,小y發現這種病毒很弱,只是會把文檔中的所有字母替換成其它字母,但并不改變順序,也不會增加和刪除字母。

現在怎么恢復原來的文檔呢!小y很聰明,他在其他沒有感染病毒的機器上,生成了一個由若干單詞構成的字典,字典中的單詞是按照字母順序排列的,他把這個文件拷貝到自己的機器里,故意讓它感染上病毒,他想利用這個字典文件原來的有序性,找到病毒替換字母的規律,再用來恢復其它文檔。

現在你的任務是:告訴你被病毒感染了的字典,要你恢復一個字母串。

【輸入】

第一行為整數K(≤50000),表示字典中的單詞個數。

以下K行,是被病毒感染了的字典,每行一個單詞。

最后一行是需要你恢復的一串字母。

所有字母均為小寫。

【輸出】

輸出僅一行,為恢復后的一串字母。當然也有可能出現字典不完整、甚至字典是錯的情況,這時請輸出一個0。

【輸入樣例】

6
cebdbac
cac
ecd
dca
aba
bac
cedab

【輸出樣例】

abcde

【源程序】

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #include<set> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 50001 #define MOD 123 #define E 1e-6 using namespace std; int n; int a[N][101],g[27][27]; int enter[27],vis[27],sum[27]; int cnt; int p; void judge(int x,int y) {if(a[x][y]==0||a[x+1][y]==0)return ;if(a[x][y]!=a[x+1][y]){g[a[x][y]][a[x+1][y]]=1;enter[a[x+1][y]]++;}elsejudge(x,y+1); } bool topsort() {for(int i=1;i<=27;++i)if(vis[i])cnt++;for(int i=1;i<n;++i)judge(i,1);int work,temp;while(p!=cnt){work=0;for(int i=1;i<=cnt;++i){if(enter[i]==0){temp=i;enter[i]=-1;work++;}}if(work!=1)return false;sum[++p]=temp;for(int i=1;i<=cnt;++i){if(g[temp][i]){g[temp][i]=0;enter[i]--;}}}return true; } int main() {cin>>n;for(int i=1;i<=(n+1);i++){string str;cin>>str;for(int j=0;j<str.size();j++){a[i][++a[i][0]]=int(str[j]+1-'a');vis[str[j]+1-'a']=1;}}if(!topsort())cout<<0;else{for(int i=1;i<=a[n+1][0];++i){for(int j=1;j<=cnt;++j){if(a[n+1][i]==sum[j]){cout<<char(j-1+'a');break;}}}}return 0; }

?

總結

以上是生活随笔為你收集整理的病毒(信息学奥赛一本通-T1396)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。