POJ 3087 模拟+hash

来源:互联网 发布:网络调试助手使用说明 编辑:程序博客网 时间:2024/06/06 07:33

也可以用map来搞
样例推出来 就没啥问题了 (先读的是B 然后是A 被坑好久)

//By SiriusRen#include <cstdio>#include <iostream>#include <algorithm>using namespace std;#define mod 10000007int n,T,cases,rec,vis[10000007];char a[605],b[605],c[933],s[933];int main(){    scanf("%d",&T);    for(cases=1;cases<=T;cases++){        int t=0;rec=0;        scanf("%d",&n);        for(int i=1;i<=n;i++)cin>>b[i];        for(int i=1;i<=n;i++)cin>>a[i];        for(int i=1;i<=2*n;i++)cin>>c[i],rec=(rec*128+c[i])%mod;        while(++t){            int temp=0;            for(int i=1;i<=n;i++){                s[i*2-1]=a[i],s[i*2]=b[i];                temp=(128*temp+s[i*2-1])%mod;                temp=(128*temp+s[i*2])%mod;            }            if(temp==rec){printf("%d %d\n",cases,t);break;}            else if(vis[temp]==cases){printf("%d -1\n",cases);break;}            else vis[temp]=cases;            for(int i=1;i<=n;i++)b[i]=s[i];            for(int i=1;i<=n;i++)a[i]=s[i+n];        }    }}

这里写图片描述

0 0