Team Tic Tac Toe 题解

题面:

Team Tic Tac Toe 题解

翻译:

有一些牛在玩一个游戏:
他们把一些字母写在一个3*3的黑板上.
这些奶牛的名字的首字母分别是A…Z
如果黑板上有相同的字母能够连成一行/一列/一斜.那么名字首字母为这个字母的牛获胜.
但是这样的话太难获胜了,所以这个游戏可以允许两个人合作.
如果有两个字母可以组成一行/一列/一斜,那么两头牛合作获胜.

输入:

三行三列的9个字母

输出:

第一行是一个整数,代表能够独自取胜的牛的个数.
第二行是一个整数,代表能够合作取胜的牛有多少对.

题目分析:

这个题目并不难,就是代码量比较大.
同时要注意几个点:

  • 已经能够获胜的奶牛不需要重复计算
    比如
    XXX
    XXX
    XXX
    那么答案就是
    1
    0
  • 不能抱大腿,一行/一列/一斜,需要同时含有两个字母,才能算是合作取胜,XXX这样的一行不能算作是X和A合作取胜.

代码:

#include<stdio.h>

char b[9], ans1, ans2;
bool cow[26] ,cows[26][26];

void cmp(char c1, char c2, char c3){
    if(c1 == c2 && c2 == c3 && c3 == c1){
        if(!cow[c1-65]){
            cow[c1-65] = 1;
            ans1++;
        }
    }
    if(c1 == c2 && c1 != c3){
        if(!cows[c1-65][c3-65]){
            cows[c1-65][c3-65] = cows[c3-65][c1-65] = 1;
            ans2++;
        }
    }
    if(c1 == c2 && c1 != c3){
        if(!cows[c1-65][c3-65]){
            cows[c1-65][c3-65] = cows[c3-65][c1-65] = 1;
            ans2++;
        }
    }
    if(c1 == c3 && c1 != c2){
        if(!cows[c1-65][c2-65]){
            cows[c1-65][c2-65] = cows[c2-65][c1-65] = 1;
            ans2++;
        }
    }
    if(c3 == c2 && c1 != c3){
        if(!cows[c1-65][c3-65]){
            cows[c1-65][c3-65] = cows[c3-65][c1-65] = 1;
            ans2++;
        }
    }
}

int main(){
    for(int i = 0; i < 9; i++)  scanf(" %c", b+i);
    ans1 = 0; ans2 = 0;
    cmp(b[0],b[1],b[2]);
    cmp(b[3],b[4],b[5]);
    cmp(b[6],b[7],b[8]);

    cmp(b[0],b[3],b[6]);
    cmp(b[1],b[4],b[7]);
    cmp(b[2],b[5],b[8]);

    cmp(b[0],b[4],b[8]);
    cmp(b[2],b[4],b[6]);

    printf("%d\n%d\n", ans1, ans2);
}
上一篇:SQL UPDATE 大量更新


下一篇:Codeforces 983C Elevator dp (看题解)