还能比这道题更水吗。只要看的懂题意直接模拟法写了就行。
没编译器的话甚至直接在记事本上写写交了也可以AC的。
#include<iostream>
using namespace std;const int N=205;
char s1[N],s2[N],s12[N],s01[N],s02[N];
int c;
int ans;
bool same(char a[],char b[],int c)
{
for(int i=1;i<=c;i++)
{
if(a[i]!=b[i])
return false;
}
return true;
}
void f()
{
char s[N];
for(int i=1;i<=c;i++)
{
s01[i]=s1[i];
s02[i]=s2[i];
}
while(1)
{
int i1=1,i2=1;
for(int i=1;i<=2*c;i++)
if(i%2)
{
s[i]=s2[i2++];
}
else
s[i]=s1[i1++];
if(same(s,s12,2*c))
{
printf("%d\n",ans+1);
return;
}
for(int i=1;i<=c;i++)
s1[i]=s[i],s2[i]=s[i+c];
if(same(s1,s01,c)&&same(s2,s02,c))
break;
ans++;
}
printf("-1\n");
return ;
}
int main()
{
//freopen("C:\\Users\\wuyanyisb\\Desktop\\1.txt","r",stdin);
int cases;
scanf("%d\n",&cases);
int k=1;
while(cases--)
{
scanf("%d\n",&c);
scanf("%s",s1+1);
scanf("%s",s2+1);
scanf("%s",s12+1);
ans=0;
printf("%d ",k++);
f();
}
return 0;
}