POJ 2361&&POJ 3075

题意: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 }

 

你可能感兴趣的:(poj)