• Codeforces 3C


    C. Tic-tac-toe

    time limit per test
    1 second
    memory limit per test
    64 megabytes
    input
    standard input
    output
    standard output

    Certainly, everyone is familiar with tic-tac-toe game. The rules are very simple indeed. Two players take turns marking the cells in a 3 × 3grid (one player always draws crosses, the other — noughts). The player who succeeds first in placing three of his marks in a horizontal, vertical or diagonal line wins, and the game is finished. The player who draws crosses goes first. If the grid is filled, but neither Xs, nor 0s form the required line, a draw is announced.

    You are given a 3 × 3 grid, each grid cell is empty, or occupied by a cross or a nought. You have to find the player (first or second), whose turn is next, or print one of the verdicts below:

    • illegal — if the given board layout can't appear during a valid game;
    • the first player won — if in the given board layout the first player has just won;
    • the second player won — if in the given board layout the second player has just won;
    • draw — if the given board layout has just let to a draw.
    Input

    The input consists of three lines, each of the lines contains characters ".", "X" or "0" (a period, a capital letter X, or a digit zero).

    Output

    Print one of the six verdicts: first, second, illegal, the first player won, the second player won or draw.

    Examples
    input
    X0X
    .0.
    .X.
    output
    second

    题意:给出一个井字棋棋盘,第一个人画X,第二个人画0,“.”表示该位置还没有画。两人轮流画,谁先画出一行,一列,或一对角线就算赢。判断棋盘的情况并输出,可能出现的情况有6种,分别是:illegal(棋盘不合法),the first player won(第一个人赢),the second player won(第二个人赢),draw(棋盘画满),first(轮到第一个人下了),second(轮到第二个人下了)。

    题解:模拟。按照给出的棋盘和定义直接模拟即可。但是这题考虑的情况比较多,容易被hack,必须全面考虑,具体的参见代码最后的if判断就是此题全部的分类讨论情况。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string s[3];
     4 int X,O;
     5 bool win1,win2;
     6 bool solve(char c)
     7 {
     8     for (int i=0;i<3;++i)
     9     {
    10         bool win=1;
    11         for (int j=0;j<3;++j)
    12         if (s[i][j]!=c)
    13         {
    14             win=0;
    15             break;
    16         }
    17         if (win) return 1;
    18     }
    19     for (int i=0;i<3;++i)
    20     {
    21         bool win=1;
    22         for (int j=0;j<3;++j)
    23         if (s[j][i]!=c)
    24         {
    25             win=0;
    26             break;
    27         }
    28         if (win) return 1;
    29     }
    30     if (s[0][0]==c&&s[1][1]==c&&s[2][2]==c) return 1;
    31     if (s[0][2]==c&&s[1][1]==c&&s[2][0]==c) return 1;
    32     return 0;
    33 }
    34 int main()
    35 {
    36     for (int i=0;i<3;++i)
    37     cin>>s[i];
    38     for (int i=0;i<3;++i)
    39     for (int j=0;j<3;++j)
    40     if (s[i][j]=='X') ++X;
    41     else if (s[i][j]=='0') ++O;
    42     win1=solve('X');
    43     win2=solve('0');
    44     if (win1&&win2) return puts("illegal"),0;
    45     if (win1&&X-O!=1) return puts("illegal"),0;
    46     if (win2&&X!=O) return puts("illegal"),0;
    47     if (X-O>1||O>X) return puts("illegal"),0;
    48     if (win1) return puts("the first player won"),0;
    49     if (win2) return puts("the second player won"),0;
    50     if (X+O==9) return puts("draw"),0;
    51     if (X==O) return puts("first"),0;
    52     if (X>O) return puts("second"),0;
    53 }
    View Code
  • 相关阅读:
    oracle--角色权限
    oracle--权限的传递
    oracle--少见操作、如何调整dos窗口大小、字符集设置
    oracle--对象权限
    oracle-系统权限管理
    IOS-swift5.1快速入门之旅
    oracle--用户区别sys和system
    JSP基础--EL表达式
    JSP基础--javaBean
    hdu_A Walk Through the Forest ——迪杰特斯拉+dfs
  • 原文地址:https://www.cnblogs.com/zk1431043937/p/7587751.html
Copyright © 2020-2023  润新知