比赛 20120706 评测结果 AAATTTTTTT
题目名称 解密 最终得分 30
用户昵称 Makazeu 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-07-06 10:42:55
显示代码纯文本
#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;
}