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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Reginal2011_Chengdu_I Isabella's Message

發布時間:2024/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reginal2011_Chengdu_I Isabella's Message 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目地址:2011_Chengdu_I

題目大意: 先給你一個矩陣,然后給你一個“mask”,里面n*n/4 個hole ,把它放在這個矩陣上,hole的地方會形成一個striing,現在把這個mask順時針旋轉90度,得到第二個string,然后。。直到得到4個string,但是不知道哪個打頭,這樣就有4中可能,需要一一枚舉。


然后給你了一個單詞表 ,我們放進一個set,用count查詢。

得到每個可能的信息串后,要將它拆成一個個的單詞,為了方斌拆分,在最后加一個’.‘ ?;

剛剛開一個p[50][50] ?會re ?干脆數組都開大一點


代碼比較長,模擬。。

代碼:

#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;}}}

轉載于:https://www.cnblogs.com/jingqi814/p/3644380.html

總結

以上是生活随笔為你收集整理的Reginal2011_Chengdu_I Isabella's Message的全部內容,希望文章能夠幫你解決所遇到的問題。

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