| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1358887 | altern23 | Plus Minus (BOI17_plusminus) | C++20 | 93 ms | 12792 KiB |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MOD = 1e9+7;
ll expo(ll a, ll b) {
ll ans = 1;
while (b > 0) {
if (b&1) ans = ans*a%MOD;
a = a*a%MOD;
b /= 2;
}
return ans;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int tc = 1;
// cin >> tc;
while (tc--) {
ll N, M, K; cin >> N >> M >> K;
map <ll, ll> check_N, check_M;
bool can_N = 1, can_M = 1, ch = 1;
ll G = -1;
for (int i = 1; i <= K; i++) {
char sign; cin >> sign;
ll z = (sign == '+');
ll r, c; cin >> r >> c;
if (G == -1) {
G = (r+c)%2 == z;
}
else {
ch &= (G == ((r+c)%2 == z));
}
if (check_N.count(r)) {
if (check_N[r] != (c%2 == z)) {
can_N = 0;
}
}
check_N[r] = (c%2 == z);
if (check_M.count(c)) {
if (check_M[c] != (r%2 == z)) {
can_M = 0;
}
}
check_M[c] = (r%2 == z);
}
ll ans = (can_N*expo(2, N-check_N.size())+can_M*expo(2, M-check_M.size()))%MOD;
if (!K) {
ans -= 2LL-MOD;
ans %= MOD;
}
else {
ans -= ch-MOD;
ans %= MOD;
}
cout << ans << "\n";
}
}
/*
*/| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
| # | 결과 | 실행 시간 | 메모리 | 채점기 출력 |
|---|---|---|---|---|
| 결과를 불러오는 중입니다… | ||||
