AcWing 19694. 五子棋对弈
原题链接
简单
作者:
inwei
,
2025-03-24 20:53:27
·河南
,
所有人可见
,
阅读 4
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5;
int res;
int p[N][N];
void check(){
int num = 0;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(p[i][j] == 0) num++;
}
}
if(num != 13) return;
int nm = 0;
nm += p[0][0] + p[1][1] + p[2][2] + p[3][3] + p[4][4];
if(nm%5 == 0) return;
nm = 0;
nm += p[0][4] + p[1][3] + p[2][2] + p[3][1] + p[4][0];
if(nm%5 == 0) return;
nm = 0;
for(int i=0;i<5;i++){
nm += p[i][4-i];
}
if(nm%5 == 0) return;
nm = 0;
for(int i=0;i<5;i++){
nm += p[i][0] + p[i][1] + p[i][2] + p[i][3] + p[i][4];
if(nm%5 == 0) return;
nm = 0;
nm += p[0][i] + p[1][i] + p[2][i] + p[3][i] + p[4][i];
if(nm%5 == 0) return;
nm = 0;
}
res++;
}
void dfs(int x){
if(x==25){
check();
return;
}
int dx = x/5;
int dy = x%5;
p[dx][dy] = 0;
dfs(x+1);
p[dx][dy] = 1;
dfs(x+1);
}
signed main()
{
dfs(0);
cout<<res<<endl;
return 0;
}