Gym 100625C 密文匹配-模拟题-(map)
2015-08-14 01:00
525 查看
题意:已知n个明文和一个密文,推出可能的匹配关系,然后输出字符串ss的密文。
分析:
一个模拟题,当时想偏了,还想着要同一字母可能在任意位置,然后要记录每个字母的位置,找密文的相应位置必须是同一字母,balabala的,不知道什么鬼。
其实就是简单的对应关系,不用管位置啥的,只管同一字母对应的密文是一样的就行了。26个字母,枚举一遍就是了。对应关系匹配啥的用map是最好不过的了。小tirck是,如果已知25个字母,那么剩下的一个也就知道了。
代码:
分析:
一个模拟题,当时想偏了,还想着要同一字母可能在任意位置,然后要记录每个字母的位置,找密文的相应位置必须是同一字母,balabala的,不知道什么鬼。
其实就是简单的对应关系,不用管位置啥的,只管同一字母对应的密文是一样的就行了。26个字母,枚举一遍就是了。对应关系匹配啥的用map是最好不过的了。小tirck是,如果已知25个字母,那么剩下的一个也就知道了。
代码:
#include<iostream> #include<string> #include<cstring> #include<map> #include<algorithm> using namespace std; int t,n; char a[200][1005],b[1005],c[1005]; char ans[200][1005]; map<char,char> mp1,mp2; int main() { cin>>t; while(t--){ cin>>n; for(int i=0;i<n;i++){ cin>>a[i]; } cin>>b>>c; int len1=strlen(b); int len2=strlen(c); int ok1[10005]; memset(ok1,0,sizeof(ok1)); int ok2=0; for(int i=0;i<n;i++){ int l=strlen(a[i]); if(l==len1){ mp1.clear(); mp2.clear(); int ok=1,cnt=0; for(int j=0;j<len1;j++){ if(mp1[a[i][j]]==0&&mp2[b[j]]==0){ mp1[a[i][j]]=b[j]; cnt++; mp2[b[j]]=a[i][j]; } else if(mp1[a[i][j]]==b[j]&&mp2[b[j]]==a[i][j]) continue; else{ ok=0;break; } } if(ok){ ok1[i]=1; ok2=1; if(cnt==25){ char tmp1,tmp2; for(char j='a';j<='z';j++){ if(mp1[j]==0){ tmp1=j;break; } } for(char j='a';j<='z';j++){ if(mp2[j]==0){ tmp2=j;break; } } mp1[tmp1]=tmp2; } for(int j=0;j<len2;j++){ if(mp1[c[j]]!=0){ ans[i][j]=mp1[c[j]]; } else ans[i][j]='?'; } } } } if(!ok2){ cout<<"IMPOSSIBLE"<<endl; } else{ for(int i=0;i<len2;i++){ char tmp='#'; for(int j=0;j<n;j++){ if(ok1[j]){ if(tmp=='#') tmp=ans[j][i]; else if(tmp!=ans[j][i]){ tmp='?';break; } } } cout<<tmp; } cout<<endl; } } }
相关文章推荐
- _DataStructure_C_Impl:基数排序
- 黑马程序员--Java基础--String
- 修改乱码
- _DataStructure_C_Impl:LinkListBasedSort
- 组织机构管理
- _DataStructure_C_Impl:SeqListBasedSort
- shape图形的使用
- shape图形的使用
- 设计模式:设计模式经典总结
- Oracle索引扫描
- 设计模式:28 男人和女人_访问者模式
- Cocos2d-x移植到Android平台编译的两个文件Android.mk和Application.mk
- TP中讲的两种ajax方法
- Hdu 1162 Eddy's picture【最小生成树】
- 多维数组的定义和存储
- QList类介绍
- hdoj 2242 考研路茫茫——空调教室 【无向图求边双联通 缩点 + 树形dp】
- UVA 10369 Arctic Network【最小生成树】
- leetcode#195-tenthline
- Poj 2253 Frogger【最小生成树(巧解)】