Reginal2011_Chengdu_I Isabella's Message
生活随笔
收集整理的這篇文章主要介紹了
Reginal2011_Chengdu_I Isabella's Message
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目地址:2011_Chengdu_I
題目大意: 先給你一個矩陣,然后給你一個“mask”,里面n*n/4 個hole ,把它放在這個矩陣上,hole的地方會形成一個striing,現(xiàn)在把這個mask順時針旋轉(zhuǎn)90度,得到第二個string,然后。。直到得到4個string,但是不知道哪個打頭,這樣就有4中可能,需要一一枚舉。
然后給你了一個單詞表 ,我們放進一個set,用count查詢。
得到每個可能的信息串后,要將它拆成一個個的單詞,為了方斌拆分,在最后加一個’.‘ ?;
剛剛開一個p[50][50] ?會re ?干脆數(shù)組都開大一點
代碼比較長,模擬。。
代碼:
#include<iostream> #include<set> #include<string> #include<cstring> #include<vector> #include<algorithm> #include<cstdio> using namespace std;char p[55][55];bool hole[55][55]; bool hole1[55][55]; bool hole2[55][55]; bool hole3[55][55];int x[1000]; int y[1000];int x1[1000]; int y1[1000];int x2[1000]; int y2[1000];int x3[1000]; int y3[1000];void init() {memset(hole,0,sizeof(hole));memset(hole1,0,sizeof(hole1));memset(hole2,0,sizeof(hole2));memset(hole3,0,sizeof(hole3));}int main() {int cas;cin>>cas;for(int l=0;l<cas;l++){init();int index=0;set<string> vocabulary;int n;cin>>n;for(int i=0;i<n;i++)scanf("%s",p[i]);char ch;for(int i=0;i<n;i++)for(int j=0;j<n;j++){cin>>ch;if(ch=='*'){x[index]=i;y[index]=j;index++;}}int words_num;cin>>words_num;string s;for(int i=0;i<words_num;i++){cin>>s;vocabulary.insert(s);}// 90for(int i=0;i<index;i++){x1[i]=y[i];y1[i]=n-1-x[i];}// 180for(int i=0;i<index;i++){x2[i]=n-1-x[i];y2[i]=n-1-y[i];}// 270for(int i=0;i<index;i++){x3[i]=n-1-y[i];y3[i]=x[i];}string w="",w1="",w2="",w3="";for(int i=0;i<index;i++){hole[x[i]][y[i]]=1;hole1[x1[i]][y1[i]]=1;hole2[x2[i]][y2[i]]=1;hole3[x3[i]][y3[i]]=1;}for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(hole[i][j]==1) w+=p[i][j];if(hole1[i][j]==1) w1+=p[i][j];if(hole2[i][j]==1) w2+=p[i][j];if(hole3[i][j]==1) w3+=p[i][j];}string ans[4];ans[0]=w+w1+w2+w3+'.';ans[1]=w1+w2+w3+w+'.';ans[2]=w2+w3+w+w1+'.';ans[3]=w3+w+w1+w2+'.';vector<string> words_in_ans[4]; // 保存拆分后的單詞int length=ans[0].length();string cur="";// 放進相應單詞序列中for(int k=0;k<4;k++)for(int i=0;i<length;i++){if(ans[k][i]=='.'){if(cur!="") words_in_ans[k].push_back(cur);cur="";}else cur+=ans[k][i];}bool valid[4];for(int i=0;i<4;i++)valid[i]=1;for(int k=0;k<4;k++)for(int i=0;i<words_in_ans[k].size();i++){if(vocabulary.count(words_in_ans[k][i])==0) {valid[k]=0;break;}}vector<string> final_ans;vector<string> sort_assist; // 用于輔助排序vector<int> id; // 因為要用words_in_ans[k] 進行輸出,所以比出來以后還要 找出0-3中是哪個idfor(int k=0;k<4;k++){if(valid[k]){final_ans.push_back(ans[k]);string s="";for(int i=0;i<words_in_ans[k].size();i++)s+=words_in_ans[k][i];sort_assist.push_back(s);id.push_back(k);}}int ans_size=final_ans.size();if(ans_size==0)cout<<"Case #"<<l+1<<": "<<"FAIL TO DECRYPT"<<endl;else if(ans_size==0){cout<<"Case #"<<l+1<<":";for(int i=0;i<words_in_ans[0].size();i++){cout<<" "<<words_in_ans[0][i];}cout<<endl;}else{int min_index=0;string min_ans=sort_assist[0];for(int i=0;i<ans_size;i++){if(sort_assist[i]<min_ans){min_index=i;min_ans=sort_assist[i];}}int ans_index=id[min_index];cout<<"Case #"<<l+1<<":";for(int i=0;i<words_in_ans[ans_index].size();i++){cout<<" "<<words_in_ans[ans_index][i];}cout<<endl;}}}轉(zhuǎn)載于:https://www.cnblogs.com/jingqi814/p/3644380.html
總結(jié)
以上是生活随笔為你收集整理的Reginal2011_Chengdu_I Isabella's Message的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA 621 Secret Resea
- 下一篇: Python的异常处理机制 -- (转