Submission #550986

#TimeUsernameProblemLanguageResultExecution timeMemory
550986bluePlus Minus (BOI17_plusminus)C++17
0 / 100
0 ms212 KiB
#include <iostream> #include <vector> #include <set> using namespace std; using vi = vector<int>; using ll = long long; using pii = pair<int, int>; #define sz(x) int(x.size()) const ll mod = 1'000'000'007LL; ll sq(ll a) { return (a*a)%mod; } ll mul(ll a, ll b) { return (a*b)%mod; } ll pow(ll b, ll e) { if(e == 0) return 1; else if(e % 2 == 0) return sq(pow(b, e/2)); else return mul(b, pow(b, e-1)); } ll ad(ll a, ll b) { return (a+b)%mod; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, M, K; cin >> N >> M >> K; set<int> rows, cols; set<pii> R, C; set<int> Z; for(int k = 1; k <= K; k++) { char z; cin >> z; int a = (z == '+'); int x, y; cin >> x >> y; rows.insert(x); cols.insert(y); R.insert({x, a ^ (y % 2)}); C.insert({y, a ^ (x % 2)}); Z.insert(a ^ (x % 2) ^ (y % 2)); } ll res = 0; if(sz(R) == sz(rows)) { res = ad(res, pow(2, N - sz(rows))); } if(sz(C) == sz(cols)) { res = ad(res, pow(2, M - sz(cols))); } if(sz(Z) == 1) { res = (res + mod - 1) % mod; } cout << res << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...