본문 바로가기

USACO/Bronze

백준 15763 Team Tic Tac Toe (USACO US Open 2018 Bronze 1번)

문제 링크: https://www.acmicpc.net/problem/15763

 

15763번: Team Tic Tac Toe

In this example, no single cow can claim victory. However, if cows C and X team up, they can win via the C-X-C diagonal. Also, if cows X and O team up, they can win via the middle row.

www.acmicpc.net

CCC

CAA

CAA

위의 예시에서와 같이, CCC가 첫번째 row와 첫번째 column에 총 두번 등장하지만, 한번만 세야함.

set을 이용해서 중복을 쉽게 처리해줄수 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;
 
int r[3][200], c[3][200], d[3][200];
set<int> one;
set<pair<intint>> two;
 
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    for(int i = 0; i < 3; i++for(int j = 0; j < 3; j++) {
        char ch;
        cin >> ch;
        r[i][ch]++;
        c[j][ch]++;
        if(i == j) d[0][ch]++;
        if(i + j == 2) d[1][ch]++;
    }
 
    for(int i = 'A'; i <= 'Z'; i++for(int j = 0; j < 3; j++)
        if(r[j][i] == 3 || c[j][i] == 3 || d[j][i] == 3one.insert(i);
 
    for(int i = 'A'; i <= 'Z'; i++for(int j = 'A'; j <= 'Z'; j++) {
        for(int k = 0; k < 3; k++) {
            if(r[k][i] == 1 && r[k][j] == 2 || c[k][i] == 1 && c[k][j] == 2 || d[k][i] == 1 && d[k][j] == 2)
                two.insert({i, j}), two.insert({j, i});
        }
    }
 
    cout << one.size() << '\n' << two.size() / 2 << '\n';
    return 0;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter