제출 #1323635

#제출 시각아이디문제언어결과실행 시간메모리
1323635boclobanchatPlus Minus (BOI17_plusminus)C++20
100 / 100
96 ms9816 KiB
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long poww(long long n,long long m)
{
	long long res=n,ans=1;
	while(m)
	{
		if(m&1) ans=ans*res%mod;
		res=res*res%mod,m/=2;
	}
	return ans;
}
map<int,int> mpx,mpy;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,m,k;
	cin>>n>>m>>k;
	bool e1=true,e2=true,e3=true,e4=true;
	int cn=n,cm=m;
	for(int i=1;i<=k;i++)
	{
		int x,y;
		char c;
		cin>>c>>x>>y;
		bool ck=(c=='+');
		e1&=((x+y)%2==ck);
		e2&=((x+y)%2!=ck);
		if(!mpx[x]) cn--,mpx[x]=(y+ck)%2+1;
		else if(mpx[x]!=(y+ck)%2+1) e3=false;
		if(!mpy[y]) cm--,mpy[y]=(x+ck)%2+1;
		else if(mpy[y]!=(x+ck)%2+1) e4=false;
	}
	long long ans=0;
	if(e3) ans=(ans+poww(2,cn))%mod;
	if(e4) ans=(ans+poww(2,cm))%mod;
	if(e1) ans=(ans+mod-1)%mod;
	if(e2) ans=(ans+mod-1)%mod;
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...