답안 #823434

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
823434 2023-08-12T14:05:50 Z serifefedartar Plus Minus (BOI17_plusminus) C++17
100 / 100
114 ms 11812 KB
#include <bits/stdc++.h>
using namespace std;
 
#define fast ios::sync_with_stdio(0);cin.tie(0);
typedef long long ll;
#define f first
#define s second
#define MOD 1000000007
#define LOGN 20
#define MAXN 2005

map<int,int> row_repet, col_repet;
ll binExp(ll a, ll b) {
    ll res = 1;
    while (b) {
        if (b & 1)
            res = (res * a) % MOD;
        a = (a * a) % MOD;
        b /= 2;
    }
    return res;
}

int main() {
    fast
    ll N, M, K;
    cin >> N >> M >> K;

    bool rowCheck = true, colCheck = true;
    for (int i = 0; i < K; i++) {
        char ch; int row, col;
        cin >> ch >> row >> col;
            
        int rowRepType, colRepType;
        if (ch == '+') {
            if (col % 2)
                rowRepType = 1;
            else
                rowRepType = 2;

            if (row % 2)
                colRepType = 1;
            else
                colRepType = 2;
        } else {
            if (col % 2)
                rowRepType = 2;
            else
                rowRepType = 1;

            if (row % 2)
                colRepType = 2;
            else
                colRepType = 1;
        }

        if (row_repet[row] != 0 && row_repet[row] != rowRepType)
            rowCheck = false;
        else
            row_repet[row] = rowRepType;

        if (col_repet[col] != 0 && col_repet[col] != colRepType)
            colCheck = false;
        else
            col_repet[col] = colRepType;
    }

    ll ans = 0;
    if (rowCheck)
        ans = (ans + binExp(2, N - row_repet.size())) % MOD;

    if (colCheck)
        ans = (ans + binExp(2, M - col_repet.size())) % MOD;

    if (rowCheck && colCheck) {
        bool firstCase = true, secondCase = true;
        for (auto u : row_repet) {
            if (u.f % 2 == u.s % 2)
                secondCase = false;
            else
                firstCase = false;
        }
        for (auto u : col_repet) {
            if (u.f % 2 == u.s % 2)
                secondCase = false;
            else
                firstCase = false;   
        }
        ans = ans - firstCase - secondCase;
    }

    while (ans < 0)
        ans += MOD;
    cout << ans << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 320 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 320 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 324 KB Output is correct
16 Correct 37 ms 1356 KB Output is correct
17 Correct 38 ms 1284 KB Output is correct
18 Correct 37 ms 1348 KB Output is correct
19 Correct 40 ms 1228 KB Output is correct
20 Correct 47 ms 1276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 320 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 324 KB Output is correct
16 Correct 37 ms 1356 KB Output is correct
17 Correct 38 ms 1284 KB Output is correct
18 Correct 37 ms 1348 KB Output is correct
19 Correct 40 ms 1228 KB Output is correct
20 Correct 47 ms 1276 KB Output is correct
21 Correct 84 ms 7284 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 82 ms 7248 KB Output is correct
24 Correct 77 ms 7208 KB Output is correct
25 Correct 81 ms 7176 KB Output is correct
26 Correct 75 ms 9904 KB Output is correct
27 Correct 78 ms 9896 KB Output is correct
28 Correct 76 ms 9804 KB Output is correct
29 Correct 81 ms 9840 KB Output is correct
30 Correct 114 ms 11812 KB Output is correct