POJ 3087 解题报告--看似简单的不起眼的东西足以WA了

PS:这道题目根本就不是广搜题,又被忽悠了,感觉就是水题中的水题!!
判断为-1的情况是,偷懒了一下,让Count==100000,变输出-1.结果连续提交两次,两次WA晕啊
实在没有办法,只好把这样一种情况给分析了一下,添了几行代码,竟然AC了,看来,逻辑严密很重要啊,这就是科学呀,来不得半点偷懒。
其实有些时候,就应该偷一下懒,编程本来就是为了偷懒的嘛。
但,以后,得记住,如果老是WA,不妨把那些角落里面看似不起眼的东西都翻出来,好好看看,如果不符合逻辑,立马更改。
谨记!

Source Code:
#include <iostream>
using namespace std;


int Count=0;
int len=0;
char S1[100];
char Start[100];
char S2[100];
char T[200];
char Finish[200];
void Union(char * T,char * S1,char *S2)
{//让这两个联合
int i=0;
int i_s1=0;
int i_s2=0;
while(i<=2*len-1)
{
   if(i==0)
   {
    T[i++]=S2[i_s2++];   
   }
   else if(i==1)
   {
    T[i++]=S1[i_s1++];
   }
   else if(i%2==0)
   {
    T[i++]=S2[i_s2++];
   }
   else
   {
    T[i++]=S1[i_s1++];
   }
}
}
bool IsEqual(char * T,char * Final,int temp=2*len-1)
{
int i=0;
while(i<=temp)
{
   if(T[i]!=Final[i])
   return false;
   i++;
}
return true;
}
void Break(char * T,char * S1,char * S2)//上面是S2,下面是S1
{
int i=0;
while(i<=len-1)
{
   S1[i]=T[i];
   i++;
}
i=len;
int j=0;
while(i<=2*len-1)
{
   S2[j]=T[i];
   i++;
   j++;
}
}
void Play(int n)
{
for(int i=0;i<len;i++)
{
   Start[i]=S1[i];
}
Count=0;
while(1)
{
   Union(T,S1,S2);
   Count++;
   if(IsEqual(T,Finish))
   {
    printf("%d %d\n",n,Count);
    break;
   }
   Break(T,S1,S2);
// if(Count==100000)
   if(IsEqual(S1,Start,len-1))
   {
    printf("%d -1\n",n);
    break;
   }
}

}
int main()
{
int n=0;
scanf("%d",&n);
int i=1;
while(i<=n)
{
   //Count=0;
   memset(Start,0,100*sizeof(char));
   memset(S1,0,100*sizeof(char));
   memset(S2,0,100*sizeof(char));
   memset(Finish,0,200*sizeof(char));
   memset(T,0,200*sizeof(char));
   cin>>len;
   cin>>S1;
   cin>>S2;
   cin>>Finish;
   Play(i++);
}
return 0;
}

评论

  1. 呵呵,似乎有点乱。。
    Count==len*len 就可过。

    char * shuffle(char *s1, char *s2, char *s12, int c)
    {

    char *os1 = s1;
    char *os2 = s2;
    char *os12 = s12;

    while(*s2 != '\0'){
    *s12++ = *s2++;
    *s12++ = *s1++;
    }
    *s12 = '\0';
    strncpy(os1, os12, c);
    os1[c] = '\0';
    strncpy(os2, os12+c, c);
    os2[c] = '\0';
    return os12;
    }

    回复删除

发表评论

此博客中的热门博文

Linux/ARM Page Table Entry 属性设置分析

由RFE指令引发的一串故事

提交了30次才AC ---【附】POJ 2488解题报告