제출 #630802

#제출 시각아이디문제언어결과실행 시간메모리
630802bachhoangxuanPlus Minus (BOI17_plusminus)C++17
100 / 100
187 ms15004 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int mod=1e9+7; int power(int a,int n){ int res=1; while(n){ if(n&1) res=(res*a)%mod; a=(a*a)%mod;n>>=1; } return res; } int n,m,k; map<int,int[2]> h,w; bool check[2]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); cin >> n >> m >> k; int ans=0,res1=power(2,n),res2=power(2,m); for(int i=1;i<=k;i++){ char ch;cin >> ch; int x,y,c=(ch=='+')+1;cin >> x >> y; if(h[x][y%2]!=0 && h[x][y%2]!=c) res1=0; if(w[y][x%2]!=0 && w[y][x%2]!=c) res2=0; h[x][y%2]=c;w[y][x%2]=c; } for(auto it:h){ if(it.second[0]==it.second[1]) res1=0; else res1=(res1*power(2,mod-2))%mod; } for(auto it:w){ if(it.second[0]==it.second[1]) res2=0; else res2=(res2*power(2,mod-2))%mod; } check[0]=check[1]=true; for(auto it:h){ if(it.second[0]!=0) check[(it.first&1)^(it.second[0]-1)^1]=false; if(it.second[1]!=0) check[(it.first&1)^(it.second[1]-1)]=false; } if(res1==0) check[0]=check[1]=false; ans=(res1+res2)%mod; ans=(ans+mod-check[0]-check[1])%mod; cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...