Submission #829191

#TimeUsernameProblemLanguageResultExecution timeMemory
829191Darren0724Plus Minus (BOI17_plusminus)C++17
100 / 100
146 ms14924 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int mod=1e9+7; map<int,int> fi,row; int pw(int a,int b){ int ans=1; while(b){ if(b&1){ ans=ans*a%mod; } a=a*a%mod; b>>=1; } return ans; } int32_t main(){ int n,m;cin>>n>>m; int q;cin>>q; int ans1=0; int ans2=0; set<int> s; for(int i=0;i<q;i++){ char c;cin>>c; int p=(c=='+'); int a,b;cin>>a>>b; if(a%2==0){ if(!fi.count(b)){ fi[b]=p^1; } else if(fi[b]!=(p^1)){ ans1=-1; } } else{ if(!fi.count(b)){ fi[b]=p; } else if(fi[b]!=p){ ans1=-1; } } if(!row.count(a)){ row[a]=(b+p)%2; } else if(row[a]!=(b+p)%2){ ans2=-1; } s.insert((a+b+p)%2); } int m1=m-fi.size(); int m2=n-row.size(); if(ans1==-1){ ans1=0; } else{ ans1=pw(2,m1); } if(ans2==-1){ ans2=0; } else{ ans2=pw(2,m2); } int ans3=s.size()==1; if(q==0){ ans3=2; } //cout<<ans1<<' '<<ans2<<' '<<ans3<<endl; cout<<(ans1+ans2-ans3+mod)%mod<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...