제출 #1306393

#제출 시각아이디문제언어결과실행 시간메모리
1306393BigBadBullyPlus Minus (BOI17_plusminus)C++20
100 / 100
211 ms12960 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> #define ff first #define ss second const int inf = 2e18; const int mod = 1e9 + 7; const int mxn = 2e5+1; int exp(int x,int n) { int res = 1; for(;n>0;res=(n%2?res*x%mod:res),x=x*x%mod,n/=2); return res; } int inv(int x) { return exp(x,mod-2); } void solve() { int n,m,k; cin >> n >> m >> k; int v = exp(2,n); int h = exp(2,m); array<int,2> p = {0,0}; int bad = 1; map<int,int> vert,hor; while(k--) { char c; cin>> c; int i,j; cin >> i >> j; p[(i+j+(c=='+'?1:0)+2)%2]++; for(int it = 0;it < 2;it++) { int x = (c=='+'?1:-1)*(j%2?-1:1); if(vert[i] && vert[i]!=x) bad = 0,v = 0; else if(!vert[i]) vert[i] = x,v=v*inv(2)%mod; swap(vert,hor); swap(n,m); swap(i,j); swap(v,h); } } cout << (v+h-bad*((p[0]==0)+(p[1]==0))+mod)%mod << '\n'; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; //cin >>t; while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...