제출 #1275778

#제출 시각아이디문제언어결과실행 시간메모리
1275778random_user27Plus Minus (BOI17_plusminus)C++20
100 / 100
271 ms19192 KiB
// In The Name Of God #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int>pii; typedef pair<ll,ll> pll; #define pb push_back #define endl '\n' #define test(x) cout<<x,exit(0) #define fast (ios_base::sync_with_stdio(false),cin.tie(NULL)) map<int,int>mpr,mpc; set<int>str,stc; const int mod=1e9+7; ll pw(ll a, ll b){ ll res=1; while(b){ if(b%2){ res*=a;res%=mod; } b/=2; a*=a;a%=mod; } return res; } int main(){ fast; int n,m,k;cin>>n>>m>>k; int okr=1; int okc=1; int p1=1; int p2=1; for(int i=1;i<=k;i++){ string s;cin>>s; int x,y;cin>>x>>y; int val; if(s[0]=='+'){ val=1; } else{ val=0; } if((x+y+val)%2==0){ p1=0; } else{ p2=0; } str.insert(x); stc.insert(y); if(mpr[x]!=0 and mpr[x]%2!=(y+val)%2){ okr=0; } else{ if((y+val)%2==0){ mpr[x]=2; } else{ mpr[x]=1; } } if(mpc[y]!=0 and mpc[y]%2!=(x+val)%2){ okc=0; } else{ if((x+val)%2==0){ mpc[y]=2; } else{ mpc[y]=1; } } } ll ans=0; if(okr==1){ ans+=pw(2,n-str.size()); ans%=mod; } if(okc==1){ ans+=pw(2,m-stc.size()); ans%=mod; } ans-=p1+p2; if(ans<0){ ans+=mod; } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...