记录编号 |
594934 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
正负游戏 |
最终得分 |
100 |
用户昵称 |
徐诗畅 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.195 s |
提交时间 |
2024-10-06 10:41:03 |
内存使用 |
3.63 MiB |
显示代码纯文本
#include<iostream>
#define int long long
using namespace std;
const int N=1e6+5,mod=998244353;
int n,m,k,x1[N],x2[N],y1[N],y2[N];
int ans=1,flag=0;
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
signed main(){
freopen("plusminus.in","r",stdin);
freopen("plusminus.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&k);
if((n+m)&1){
puts("0"); return 0;
}
if(m>n){swap(n,m), flag=1;}
for(int i = 1;i<=k;i++){
int x,y,z; scanf("%lld%lld%lld",&x,&y,&z);
if(flag) swap(x,y);
x1[x]++; if(z==-1) x2[x]++;
}
for(int i = 1;i<=n;i++){
if(x1[i]<m){
ans=ans*(qpow(2,m-x1[i]-1))%mod;
// cout<<m-x1[i]-1<<" "<<1<<(m-x1[i]-1)<<" "<<qpow(2,m-x1[i]-1)<<endl;
}
else{
if(x2[i]%2==0){
ans=0; break;
}
}
}
printf("%lld",ans*qpow(qpow(2,m-1),mod-2)%mod);
return 0;
}