POJ3087 模拟

还能比这道题更水吗。只要看的懂题意直接模拟法写了就行。

没编译器的话甚至直接在记事本上写写交了也可以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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值