记录编号 |
39444 |
评测结果 |
AAATTTTTTT |
题目名称 |
解密 |
最终得分 |
30 |
用户昵称 |
Makazeu |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
7.033 s |
提交时间 |
2012-07-11 16:41:42 |
内存使用 |
7.94 MiB |
显示代码纯文本
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
const int MAXN=1000001;
int oka[MAXN],kodo[MAXN];//okasan,kodomo
int M=0,N=0,topm=1,topn=1;
string tmp;
map<int,int> hash1,hash2;
map<string,int> hash;
inline void init()
{
int tt;
cin>>tmp;
while(tmp!="$")
{
M++; tt=hash[tmp];
if(tt==0) {hash[tmp]=topm;oka[M]=topm;topm++;}
else oka[M]=tt;
cin>>tmp;
}
hash.clear();
cin>>tmp;
while(tmp!="$")
{
N++; tt=hash[tmp];
if(tt==0) {hash[tmp]=topn;kodo[N]=topn;topn++;}
else kodo[N]=tt;
cin>>tmp;
}
}
inline void bf()
{
bool flag;
for(int i=1;i<=M-N+1;i++)
{
flag=1;
hash1.clear();
hash2.clear();
for(int j=1;j<=N;j++)
{
if(hash1[oka[i+j-1]]==0 && hash2[kodo[j]]==0)
{
hash1[oka[i+j-1]]=kodo[j];
hash2[kodo[j]]=oka[i+j-1];
continue;
}
if(hash1[oka[i+j-1]]==kodo[j] && hash2[kodo[j]]==oka[i+j-1])
continue;
flag=0;
break;
}
if(flag)
{
printf("%d\n",i);
return;
}
}
}
int main()
{
freopen("kriptogram.in","r",stdin);
freopen("kriptogram.out","w",stdout);
std::ios::sync_with_stdio(0);
init();
bf();
return 0;
}