hdu4119Isabella's Message(模拟)
来源:互联网 发布:linux 测试硬盘性能 编辑:程序博客网 时间:2024/04/29 07:22
题目请戳这里
题目大意:给一个n*n的矩阵,n为偶数,矩阵由小写字母和'.'组成,'.'表示空格,再给一个n*n矩阵,由'.'和'*'组成,'*'表示洞,'.'表示障碍。现在将2张卡片重合,将能看到的字符从上往下从左往右依次取出组成一个新单词。卡片可以顺时针旋转90度,再取出能看到的单词,一共有4个单词,4个单词再依次组成一个句子,因为卡片是连续转动的,所以4个单词首尾相连,任取一个做句子头,所以句子一共也是4个。再给m个单词,求出字典序最小的句子并要求句子中每个单词都在给定的m个单词中。
题目分析:简单模拟题。比赛的时候都看错了题目。。。最后还兴致勃勃的敲起了字典树。。。没看到空格。。。如果算空格的话就比较简单了。将组成的句子中单词一一挑出来,在给定的m个单词中找就ok了。
详情请见代码:
#include <iostream>#include<cstdio>#include<cstring>#include<string>#include<map>#include<vector>#include<algorithm>using namespace std;const int N = 55;map<string,int>lcm;char s[N][N];int num;struct msk{ int x,y;}mask[1000];int n,m;int cmp(struct msk a,struct msk b){ if(a.x != b.x) return a.x < b.x; else return a.y < b.y;}int cmp1(string a,string b){ int i,j; i = j = 0; while(a[i] == '.') i ++; while(b[j] == '.') j ++; while(i < a.length() && j < b.length()) { if(a[i] == b[j]) i ++,j ++; else return a[i] < b[j]; }}void Rotate(){ for(int i = 1;i < num;i ++) { int t= mask[i].x; mask[i].x = mask[i].y; mask[i].y = n - t - 1; } sort(mask + 1,mask + num,cmp);}int main(){ int t,cas; int i,j; cas = 0; scanf("%d",&t); while(t --) { scanf("%d",&n); gets(s[0]); for(i = 0;i < n;i ++) gets(s[i]); num = 1; for(i = 0;i < n;i ++) { for(j = 0;j < n;j ++) { if(getchar() == '*') { mask[num].x = i; mask[num ++].y = j; } } getchar(); } scanf("%d",&m); lcm.clear(); string word; for(i = 0;i < m;i ++) { cin>>word; lcm[word] = 1; } string str[4]; for(i = 0;i < 4;i ++) str[i] = ""; for(i = 0;i < 4;i ++) { for(j = 1;j < num;j ++) str[i] += s[mask[j].x][mask[j].y]; Rotate(); } string ans[4]; for(i = 0;i < 4;i ++) { for(j = 0;j < 4;j ++) ans[i] += str[(i + j)%4]; }// for(i = 0;i < 4;i ++)// cout<<ans[i]<<endl;// cout<<endl; sort(ans,ans + 4,cmp1);// for(i = 0;i < 4;i ++)// cout<<ans[i]<<endl; string tmp; bool flag; vector<string> out; for(i = 0;i < 4;i ++) { flag = true; out.clear(); j = 0; while(j < ans[i].length()) { while(j < ans[i].length() && ans[i][j] == '.') j ++; if(j >= ans[i].length()) break; tmp = ""; while(j < ans[i].length() && ans[i][j] != '.') tmp += ans[i][j],j ++; if(lcm[tmp] == 0) { flag = false; break; } else { out.push_back(tmp); //j ++; } } if(flag) break; } printf("Case #%d:",++cas); if(i < 4) { for(j = 0;j < out.size();j ++) cout<<" "<<out[j]; cout<<endl; } else puts(" FAIL TO DECRYPT"); } return 0;}//31MS324K
- hdu4119Isabella's Message(模拟)
- HDU4119 Isabella's Message 模拟
- HDU 4119 Isabella's Message(模拟)
- HDU 4119 Isabella's Message(模拟)
- hdu 4119 Isabella's Message(模拟)
- hdu 4119 Isabella's Message ( 模拟 )
- [HDU 4119]Isabella's Message[字符串模拟]
- hdu 4119 Isabella's Message【字符串模拟】
- hdu 4119 Isabella's Message(模拟+字典树)
- Decode Alien Message模拟
- hdu4119-Isabella's Message
- HDU4300:Clairewd’s message
- Clairewd’s message +KMP
- Clairewd’s message (KMP)
- Reginal2011_Chengdu_I Isabella's Message
- INTERNET_ERROR_BASE_X 's error message
- Clairewd’s message
- hdu4300---Clairewd’s message
- 解读思维导图(一)误区
- 修改Hosts文件
- C++ 虚函数表解析
- 双四核1080P高清屏 魅族MX3配置猜想
- UVA 116 Unidirectional TSP(dp + 数塔问题)
- hdu4119Isabella's Message(模拟)
- hdu 4090 GemAnd Prince
- 打开网站,可以用来更新,简单
- 【JAVASCRIPT】使用ztree树,实现右键增加,修改,删除节点。带有复选框。
- 一步一步学C++ [1]
- 倒排索引
- 代码的境界
- Pjax的介绍及妙用
- 全排列输出