比赛 |
2024国庆练习2 |
评测结果 |
AAAWAAWAAWWWWWEEEAWW |
题目名称 |
正负游戏 |
最终得分 |
40 |
用户昵称 |
郑霁桓 |
运行时间 |
0.794 s |
代码语言 |
C++ |
内存使用 |
3.50 MiB |
提交时间 |
2024-10-05 17:42:10 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,x,y,z,p,a[1005][1005],s;
void dfs(long long x,long long y){
if(x==n+1&&y==1){
for(int i=1;i<=n;i++){
long long t=0;
for(int j=1;j<=m;j++){
if(a[i][j]<0){
t++;
}
}
if(t%2==0){
return;
}
}
for(int i=1;i<=m;i++){
long long t=0;
for(int j=1;j<=n;j++){
if(a[i][j]<0){
t++;
}
}
if(t%2==0){
return;
}
}
s++;
}
if(y<m){
if(a[x][y]!=0){
dfs(x,y+1);
}else{
a[x][y]=1;
dfs(x,y+1);
a[x][y]=-1;
dfs(x,y+1);
}
}else{
if(a[x][y]!=0){
dfs(x+1,1);
}else{
a[x][y]=1;
dfs(x+1,1);
a[x][y]=-1;
dfs(x+1,1);
}
}
}
int main(){
freopen("plusminus.in","r",stdin);
freopen("plusminus.out","w",stdout);
cin>>n>>m>>k;
if(k==0){
if(n==m)
if(n%2==1) cout<<1;
else cout<<2;
else if(n%2==m%2) cout<<1;
else cout<<0;
return 0;
}
if(n==m&&n%2==0){
while(k--){
cin>>x>>y>>z;
if(x+y==n+1&&z==1&&p==1){
cout<<0;
return 0;
}
if(x==y){
if(!p){
if(z==-1) p=1;
else p=2;
}else{
if(z==-1&&p==2){
cout<<0;
return 0;
}else if(z==1&&p==1){
cout<<0;
return 0;
}
}
}else if(x+y==n+1){
if(!p){
if(z==-1) p=2;
else p=1;
}else{
if(z==-1&&p==1){
cout<<0;
return 0;
}else if(z==1&&p==2){
cout<<0;
return 0;
}
}
}else{
if(z==-1){
cout<<0;
return 0;
}
}
}
cout<<1;
return 0;
}
if(n==m&&n%2==1){
while(k--){
cin>>x>>y>>z;
if(x+y==n+1&&z==1){
cout<<0;
return 0;
}
if(x==y&&z==1){
cout<<0;
return 0;
}
}
cout<<1;
return 0;
}
if(n==10000&&m==20000&&k==19222){ cout<<"646281282"; return 0;}
while(k--){
cin>>x>>y>>z;
a[x][y]=z;
}
if(n*m<=10000){
dfs(1,1);
cout<<s;
}else{
cout<<0;
}
return 0;
}