题意:2361:判断三子棋状态是否合法,3075:判断三子棋状态是否合法且是最终状态。
题解:别去做3075,那道题题目有误,...XXXOOO明明是不合法的偏偏要说合法,网上AC代码也过不了这样例,实际上这样例第三个'X'走下去的时候就已经结束了!!!!根本不可能有第三个'O',实在想过就扭曲一下题意或者网上贴代码上去吧
= =!这是2361的代码。
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 int T; 8 for(scanf("%d",&T);T;T--) 9 { 10 char s[12]; 11 for(int i=0;i<9;i+=3) 12 scanf(" %s",s+i); 13 int c1=0,c2=0; 14 bool flag=true; 15 for(int i=0;i<9;i++) 16 if(s[i]=='X') 17 c1++; 18 else if(s[i]=='O') 19 c2++; 20 if(c1-c2>1||c1<c2) 21 flag=false; 22 if(!flag) 23 { 24 puts("no"); 25 continue; 26 } 27 for(int i=0;i<9;i+=3) 28 if(s[i]==s[i+1]&&s[i+1]==s[i+2]&&s[i]!='.') 29 { 30 if(s[i]=='X'&&c1!=c2+1) 31 flag=false; 32 else if(s[i]=='O'&&c1!=c2) 33 flag=false; 34 } 35 for(int i=0;i<3;i++) 36 if(s[i]==s[i+3]&&s[i+3]==s[i+6]&&s[i]!='.') 37 { 38 if(s[i]=='X'&&c1!=c2+1) 39 flag=false; 40 else if(s[i]=='O'&&c1!=c2) 41 flag=false; 42 } 43 if(s[0]==s[4]&&s[4]==s[8]&&s[0]!='.') 44 { 45 46 if(s[0]=='X'&&c1!=c2+1) 47 flag=false; 48 else if(s[0]=='O'&&c1!=c2) 49 flag=false; 50 } 51 if(s[2]==s[4]&&s[4]==s[6]&&s[0]!='.') 52 { 53 if(s[2]=='X'&&c1!=c2+1) 54 flag=false; 55 else if(s[2]=='O'&&c1!=c2) 56 flag=false; 57 } 58 if(flag) 59 puts("yes"); 60 else 61 puts("no"); 62 } 63 return 0; 64 }