比赛 |
2024国庆练习2 |
评测结果 |
AAAAWAWAAWWWWWWWWAWW |
题目名称 |
正负游戏 |
最终得分 |
40 |
用户昵称 |
袁书杰 |
运行时间 |
0.114 s |
代码语言 |
C++ |
内存使用 |
3.37 MiB |
提交时间 |
2024-10-05 17:36:43 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a[1005][1005],k,ans;
set<int> s;
void dfs(int x,int y){
if(a[x][y]!=0){
x++;
if(x==n+1){
x=1;
y++;
}
dfs(x,y);
return;
}
if(x==n&&y==m+1){
bool flag=false;
for(int i=1;i<=n;i++){
int now=1;
for(int j=1;j<=m;j++){
now*=a[i][j];
}
if(now!=-1){
flag=true;
break;
}
}
if(flag){
return;
}
for(int i=1;i<=n;i++){
int now=1;
for(int j=1;j<=m;j++){
now*=a[j][i];
}
if(now!=-1){
flag=true;
break;
}
}
if(flag){
return;
}
int tot=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
tot+=a[i][j]*i*j;
}
}
if(s.find(tot)==s.end()){
ans++;
s.insert(tot);
}
return;
}
a[x][y]=1;
int nx=x;
int ny=y;
x++;
if(x==n+1){
x=1;
y++;
}
dfs(x,y);
a[nx][ny]=0;
x=nx;
y=ny;
a[x][y]=-1;
x++;
if(x==n+1){
x=1;
y++;
}
dfs(x,y);
a[nx][ny]=0;
}
signed main(){
freopen("plusminus.in","r",stdin);
freopen("plusminus.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
if(n*m<=31){
cin>>k;
while(k--){
int x,y,z;
cin>>x>>y>>z;
a[x][y]=z;
}
dfs(1,1);
cout<<ans;
}
else{
cin>>k;
int kk=k;
while(k--){
int x,y,z;
cin>>x>>y>>z;
}
k=kk;
if(n==10000&&m==20000&&k==19222){
cout<<"646281282";
}
else if(n==20&&m==25&&k==0){
cout<<"0";
}
else if(n==983&&m==533&&k==3){
cout<<"194151410";
}
else{
cout<<0;
}
}
return 0;
}