이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
unordered_map<int, int> frecvL, frecvC;
int lgPut( int x, int n ) {
if ( n == 0 )
return 1;
int p = lgPut( x, n / 2 );
p = (long long)p * p % MOD;
if ( n % 2 == 1 )
p = (long long)p * x % MOD;
return p;
}
int main() {
int n, m, k, lin = 0, col = 0;
bool isPossibleL = true, isPossibleC = true, isPossibleChess1 = true, isPossibleChess2 = true;
cin >> n >> m >> k;
for ( int i = 0; i < k; i++ ) {
char ch;
int s, l, c;
cin >> ch >> l >> c;
s = (ch == '+' ? +1 : -1);
if ( frecvL[l] == 0 )
lin++;
else if ( frecvL[l] != s * (c % 2 == 0 ? 1 : -1) )
isPossibleL = false;
frecvL[l] = s * (c % 2 == 0 ? 1 : -1);
if ( frecvC[c] == 0 )
col++;
else if ( frecvC[c] != s * (l % 2 == 0 ? 1 : -1) )
isPossibleC = false;
frecvC[c] = s * (l % 2 == 0 ? 1 : -1);
if ( (l + c) % 2 == 0 && s == +1 )
isPossibleChess1 = false;
if ( (l + c) % 2 == 1 && s == -1 )
isPossibleChess1 = false;
if ( (l + c) % 2 == 0 && s == -1 )
isPossibleChess2 = false;
if ( (l + c) % 2 == 1 && s == +1 )
isPossibleChess2 = false;
}
int ans = (isPossibleL * lgPut( 2, n - lin ) + isPossibleC * lgPut( 2, m - col ) - isPossibleChess1 - isPossibleChess2 + MOD) % MOD;
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |