Submission #132503

# Submission time Handle Problem Language Result Execution time Memory
132503 2019-07-19T05:06:29 Z 이온조(#3199) Plus Minus (BOI17_plusminus) C++14
0 / 100
2 ms 256 KB
#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;
struct mes { int x, y, v; } A[100009];
int N, M, K, ans;

void fail() {
	puts("0");
	exit(0);
}

int myp(int x) {
	if(x == 0) return 1;
	int t = myp(x>>1);
	if(x&1) return 1LL*t*t%MOD*2%MOD;
	return 1LL*t*t%MOD;
}

int solve() {
	set<int> st;
	map<int, int> mp;
	for(int i=0; i<K; i++) {
		if(mp.find(A[i].x) == mp.end()) mp[A[i].x] = (A[i].y&1) ^ A[i].v;
		else if(mp[A[i].x] != ((A[i].y&1) ^ A[i].v)) fail();
		st.insert(A[i].x + A[i].y + A[i].v & 1);
	}
	ans += myp(N - (int)mp.size()); ans %= MOD;
	return ((int)st.size() == 1);
}

int main() {
	scanf("%d%d%d",&N,&M,&K);
	if(K == 0) {
		ans = (myp(N) + myp(M)) % MOD;
		printf("%d", (ans - 2 + MOD) % MOD);
		return 0;
	}
	for(int i=0; i<K; i++) {
		char c;	scanf(" %c%d%d", &c, &A[i].x, &A[i].y);
		A[i].v = (c == '+' ? 1 : 0);
	}
	int c = 0;
	for(int i=0; i<2; i++) {
		c += solve();
		swap(N, M);
		for(int j=0; j<K; j++) swap(A[j].x, A[j].y);
	}
	printf("%d", (ans - c/2 + MOD) % MOD);
	return 0;
}

Compilation message

plusminus.cpp: In function 'int solve()':
plusminus.cpp:26:29: warning: suggest parentheses around '+' in operand of '&' [-Wparentheses]
   st.insert(A[i].x + A[i].y + A[i].v & 1);
             ~~~~~~~~~~~~~~~~^~~~~~~~
plusminus.cpp: In function 'int main()':
plusminus.cpp:33: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:40:16: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   char c; scanf(" %c%d%d", &c, &A[i].x, &A[i].y);
           ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 256 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 256 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Incorrect 2 ms 256 KB Output isn't correct
3 Halted 0 ms 0 KB -