建设网站有什么作用是什么,青岛专业制作网站的公司,搭建平台筑巢引凤,建设网站需要什么资质问题描述
在五子棋的对弈中#xff0c;友谊的小船说翻就翻#xff1f; 不#xff01;对小蓝和小桥来说#xff0c;五子棋不仅是棋盘上的较量#xff0c;更是心与心之间的沟通。这两位挚友秉承着友谊第一#xff0c;比赛第二的宗旨#xff0c;决…问题描述
在五子棋的对弈中友谊的小船说翻就翻 不对小蓝和小桥来说五子棋不仅是棋盘上的较量更是心与心之间的沟通。这两位挚友秉承着友谊第一比赛第二的宗旨决定在一块 5×55×5 的棋盘上用黑白两色的棋子来决出胜负。但他们又都不忍心让对方失落于是决定用一场和棋平局作为彼此友谊的见证。
比赛遵循以下规则
棋盘规模比赛在一个 5×55×5 的方格棋盘上进行共有 2525 个格子供下棋使用。棋子类型两种棋子黑棋与白棋代表双方。小蓝持白棋小桥持黑棋。先手规则白棋小蓝具有先手优势即在棋盘空白时率先落子下棋。轮流落子玩家们交替在棋盘上放置各自的棋子每次仅放置一枚。胜利条件率先在横线、竖线或斜线上形成连续的五个同色棋子的一方获胜。平局条件当所有 2525 个棋盘格都被下满棋子而未决出胜负时游戏以平局告终。
在这一设定下小蓝和小桥想知道有多少种不同的棋局情况既确保棋盘下满又保证比赛结果为平局。
答案提交
这是一道结果填空题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
运行限制
语言最大运行时间最大运行内存C1s256MC1s256MJava3s512MPython310s512MPyPy33s512MGo5s512MJavaScript5s512M
总通过次数: 721 |总提交次数: 1521 |通过率 47.4%c茶 超时代码
#include bits/stdc.h
using namespace std;
int mp[6][6];
int cnt;
bool check()
{int cnt1 0, cnt2 0;for(int i 1; i 5; i){for(int j 1; j 5; j){if(mp[i][j] 1)cnt1;if(mp[i][j] 2)cnt2;}}if(cnt1 ! 12 || cnt2 ! 13) return false;for(int i 1; i 5; i){int flag true;for(int j 1; j 5; j){if(mp[i][j] ! mp[i][1]){flag false;break;}}if(flag) return false;}for(int i 1; i 5; i){int flag true;for(int j 1; j 5; j){if(mp[j][i] ! mp[1][i]){flag false;break;} }if(flag) return false;}int flag true;for(int i 1; i 5; i){int j i;if(mp[i][j] ! mp[1][1]){flag false;break;}}if(flag) return false;flag true;for(int i 1; i 5; i){int j 6 - i;if(mp[i][j] ! mp[5][1]){flag false;break;}}if(flag) return false;return true;}
void dfs(int a, int b)
{if(b 6){dfs(a 1, 1); return;}if(a 6){if(check())cnt;return;}mp[a][b] 1;dfs(a, b 1);mp[a][b] 0;mp[a][b] 2;dfs(a, b 1);mp[a][b] 0;
}
int main()
{dfs(1, 1);cout cnt endl;
}
ac代码
#includeiostream
using namespace std;
int mp[5][5];
long long sum0;
void check(){int a0;for(int i0;i5;i){for(int j0;j5;j){if(mp[i][j]1) a;}}if(a!13) return;//此时满足13-12 int count0;countmp[0][0]mp[1][1]mp[2][2]mp[3][3]mp[4][4];if(count%50) return; count0;countmp[0][4]mp[1][3]mp[2][2]mp[3][1]mp[4][0];if(count%50) return; count0;for(int i0;i5;i){countmp[i][0]mp[i][1]mp[i][2]mp[i][3]mp[i][4];if(count%50) return; count0;countmp[0][i]mp[1][i]mp[2][i]mp[3][i]mp[4][i];if(count%50) return; count0;}//满足平局 sum;
}
void dfs(int num){//依次由从左往右再到从上往下的顺序遍历if(num25){//棋盘下满 check();return;}int xnum/5,ynum%5;//换算成坐标mp[x][y]0;dfs(num1);mp[x][y]1;dfs(num1);
}
int main(){dfs(0);//从0开始遍历所有结果coutsum;//3126376return 0;
}
#include bits/stdc.h
using namespace std;
int mp[5][5];
int u0;
void dfs(int sum,int h,int b)
{//地图满了判断if(sum25){if(h13b12){for(int i0;i5;i){int smp[i][0]mp[i][1]mp[i][2]mp[i][3]mp[i][4];if(s5||s0) return;}for(int i0;i5;i){int mmp[0][i]mp[1][i]mp[2][i]mp[3][i]mp[4][i];if(m5||m0) return;}int pmp[0][0]mp[1][1]mp[2][2]mp[3][3]mp[4][4];int lmp[0][4]mp[1][3]mp[2][2]mp[3][1]mp[4][0];if(p0||p5||l0||l5) return;u;}return;}int xsum/5;int ysum%5;//计算坐标mp[x][y]1;//选择白棋dfs(sum1,h1,b);mp[x][y]0;选择黑棋dfs(sum1,h,b1);
}
int main()
{dfs(0,0,0);coutu;return 0;
}
#include bits/stdc.h
using namespace std;
int ans, upp (1 5) - 1;
bitset5area[6];
bool check(int y)
{if (area[y].count() 5 || area[y].count() 0)return false;if (y 5){int sum 0;int _sum 0;for (int i 0; i 5; i){sum 0;for (int j 1; j 5; j)sum area[j][i], _sum area[j][i];if (sum 0 || sum 5)return false;}if (_sum ! 13)return false;int suml 0, sumr 0;for (int i 1; i 5; i){suml area[i][i-1];sumr area[i][5-i];}if (suml 5 || suml 0 || sumr 5 || sumr 0)return false;}return true;
}
void dfs(int y)
{if (y 6){ans;return;}for (int i 1; i upp; i){bitset5temp(i);area[y] temp;if (check(y))dfs(y 1);}
}
int main()
{dfs(1);cout ans;return 0;
}