# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
124806 | model_code | Plus Minus (BOI17_plusminus) | C++17 | 214 ms | 9720 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<cstdio>
#include<iostream>
#include<map>
using namespace std;
char flipsign(char c, int p) {
if(p%2==0) return c;
return c=='+' ? '-' : '+';
}
long long pow2(int x) {
if(x==0) return 1;
long long a = pow2(x/2);
a = ((a*a) * (x%2==1 ? 2 : 1)) % 1000000007;
return a;
}
int main() {
int n,m,k,x,y;
scanf("%d%d%d",&n,&m,&k);
map<int, char> H,V;
bool canBeH = true, canBeV = true, canBePlusEvenMinusOdd = true, canBePlusOddMinusEven = true;
for(int i = 0; i < k; ++i) {
char c;
scanf(" %c%d%d", &c, &y, &x);
canBeH &= ((int)H[y] == 0) || H[y] == flipsign(c,x);
canBeV &= ((int)V[x] == 0) || V[x] == flipsign(c,y);
H[y] = flipsign(c,x);
V[x] = flipsign(c,y);
canBePlusEvenMinusOdd &= (c=='+' && (x+y)%2==0) || (c=='-' && (x+y)%2==1);
canBePlusOddMinusEven &= (c=='+' && (x+y)%2==1) || (c=='-' && (x+y)%2==0);
}
long long ans = canBeH ? pow2(n-H.size()) : 0;
ans += canBeV ? pow2(m-V.size()): 0;
ans -= canBeH && canBeV && canBePlusEvenMinusOdd ? 1 : 0;
ans -= canBeH && canBeV && canBePlusOddMinusEven ? 1 : 0;
ans = ans % 1000000007;
printf ("%lld\n", ans);
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |