답안 #124808

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
124808 2019-07-04T02:22:53 Z model_code Plus Minus (BOI17_plusminus) C++17
12 / 100
2 ms 504 KB
#include<cassert>
#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);
    assert(n <= 5 && m <= 5);
	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;
}

Compilation message

plusminus.cpp: In function 'int main()':
plusminus.cpp:22:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d",&n,&m,&k);
  ~~~~~^~~~~~~~~~~~~~~~~~~
plusminus.cpp:29:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %c%d%d", &c, &y, &x);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 256 KB Output is correct
10 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 256 KB Output is correct
10 Correct 2 ms 256 KB Output is correct
11 Runtime error 2 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 256 KB Output is correct
10 Correct 2 ms 256 KB Output is correct
11 Runtime error 2 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
12 Halted 0 ms 0 KB -