第八届蓝桥杯C++B组 方格分割
2018-03-21 21:58
274 查看
标题:方格分割6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。请提交该整数,不要填写任何多余的内容或说明文字。
思路:看了网上大牛们的思路,这题不是看格子而是看边,从正中间(3,3)的点出发,向上下左右四个方向走,每走一步不仅要标记走的这一路线还要标记与它中心对称的路线,这样就可以把方格切成完全相同的两部分。最后结果还要除4,因为旋转对称属于同一种分割法。答案:509
PS:我们老师给的官方测评答案上是255,我翻了好多博客,大家的答案全是509,不过看到有人也提出了觉得上述代码还有点问题的(https://www.cnblogs.com/lanaiwanqi/p/6688268.html),我觉得他说的也挺有道理的,这可能就是答案比509少的原因?但是我暂时还没想到能完美解决的算法,就先搁这吧……
逛贴吧偶然逛到了255的答案,这里贴个截图
要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。请提交该整数,不要填写任何多余的内容或说明文字。
思路:看了网上大牛们的思路,这题不是看格子而是看边,从正中间(3,3)的点出发,向上下左右四个方向走,每走一步不仅要标记走的这一路线还要标记与它中心对称的路线,这样就可以把方格切成完全相同的两部分。最后结果还要除4,因为旋转对称属于同一种分割法。答案:509
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> #include<vector> #include<queue> #include<map> #include<set> using namespace std; #define N 6 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int vis[10][10]; int ans=0; void dfs(int x,int y) { if(x==0||x==N||y==0||y==N) { ans++; return; } for(int i=0;i<4;i++) { int dx=x+dir[i][0]; int dy=y+dir[i][1]; if(dx>=0&&dx<=N&&dy>=0&&dy<=N&&!vis[dx][dy]) { vis[dx][dy]=1; vis[N-dx][N-dy]=1; dfs(dx,dy); vis[dx][dy]=0; vis[N-dx][N-dy]=0; } } } int main() { vis[N/2][N/2]=1; dfs(N/2,N/2); cout<<ans/4<<endl; return 0; }
PS:我们老师给的官方测评答案上是255,我翻了好多博客,大家的答案全是509,不过看到有人也提出了觉得上述代码还有点问题的(https://www.cnblogs.com/lanaiwanqi/p/6688268.html),我觉得他说的也挺有道理的,这可能就是答案比509少的原因?但是我暂时还没想到能完美解决的算法,就先搁这吧……
逛贴吧偶然逛到了255的答案,这里贴个截图
相关文章推荐
- 第八届 蓝桥杯 c/c++ B组 省赛 (4)——方格分割
- 第八届蓝桥杯省赛B组c++_方格分割
- 第八届蓝桥杯C++B组第四题:方格分割
- 蓝桥杯第八届_方格分割
- 第八届蓝桥杯省赛真题 - 4.方格分割
- 蓝桥杯第八届 方格分割(dfs)
- 蓝桥杯 方格分割 第八届
- 方格分割-第八届蓝桥杯c/c++组
- 第八届蓝桥杯第四题:方格分割
- 2017第八届蓝桥杯省赛Java A组--方格分割
- 2017第八届蓝桥杯省赛-大学A组 方格分割(深搜dfs)
- 第八届蓝桥杯 方格分割
- 第八届蓝桥杯【省赛试题4】方格分割
- 蓝桥杯第八届省赛JAVA真题----方格分割
- 第八届蓝桥杯 dfs 方格分割
- 第八届蓝桥杯方格分割深搜
- 第八届蓝桥杯第四题方格分割
- 第八届蓝桥杯第4题:方格分割
- 第八届蓝桥杯C++B组第六题:最大公共子串
- 第七届蓝桥杯C\C++B组省赛题目——方格填数