POJ 3087 模拟+hash

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

//By SiriusRen
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define mod 10000007
int 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
",cases,t);break;}
            else if(vis[temp]==cases){printf("%d -1
",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];
        }
    }
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532239.html