ccf 201604-2 俄罗斯方块
来源:互联网 发布:java线程池初始化 编辑:程序博客网 时间:2024/05/17 08:10
题外话:这个题目挺有意思的,没有涉及到什么图论里面的算法,也不是什么图的搜索,咋一看吓死人无从下手,说实话我一开始也有点摸不着头脑,因为这个才是第二题,信息量比较大,正常人看完题目首先想到的是找规律,这个题目要是找规律你就亏大了,因为你会浪费很多时间,而且找完规律也很难拿到100分,我第一次做80分,剩下两个用例我一直没想出来,不知道哪两种特殊情况我还没想到。ccf就喜欢出这种题目,叫做“动态模拟执行”,特别是图里面的,你可以看每年ccf出的题目,五道题至少有三道是图,当然用的算法是不一样的。
解题思路:
1.我们可以模拟俄罗斯方块下降的过程直到不再下降,最后输出整个矩阵,程序就结束了。
2.我们需要输入的有两个矩阵,大矩阵15x10记作a,小矩阵4x4记作b(就是存放俄罗斯方块的),我们需要把整个矩阵a存起来,因为题目的答案就是对最后的a输出。矩阵b不需要存储内容,因为我们只要从b矩阵里面把俄罗斯方块的各个点记住即可。
3.初始状态我们将矩阵b放入矩阵a里面,需要将坐标统一为矩阵a的坐标,矩阵b在矩阵a中的起始位置,列:b[i].y+nl-1;行:找到原矩阵b中最大的一行,也就是最下面的那个行号,则等于最大的行赋值为0,小于的赋值为其行与最大的行号之差。然后开始下降过程,看代码即可;该程序是100分通过。
#include<iostream>#include<algorithm>using namespace std;int a[20][15],b;int nod_size=0;struct node{ int x; int y;}nod[25]={0};bool cmp(node n1,node n2){ return n1.x<n2.x;}int main(){ int nl,ct=0; for(int i=0;i<15;++i) { for(int j=0;j<10;++j) { scanf("%d",&a[i][j]); } } for(int i=0;i<4;++i) { for(int j=0;j<4;++j) { scanf("%d",&b); if(b==1) { nod[ct].x=i; nod[ct].y=j; nod_size++; ++ct; } } } scanf("%d",&nl); sort(nod,nod+nod_size,cmp); int nod_max_x=nod[nod_size-1].x; for(int i=0;i<nod_size;++i) { if(nod[i].x>=nod_max_x) { nod[i].x=0; } else { nod[i].x-=nod_max_x; } nod[i].y+=nl-1; } bool flag=true; while(flag) { for(int i=0;i<nod_size;++i) { if(nod[i].x>=14 || a[nod[i].x+1][nod[i].y]==1) { flag=false; break; } } for(int i=0;i<nod_size && flag;++i) { nod[i].x++; } } for(int i=0;i<nod_size;++i) { a[nod[i].x][nod[i].y]=1; } for(int k=0;k<15;++k) { for(int m=0;m<10;++m) { printf("%d",a[k][m]); if(m<9) { printf(" "); } } printf("\n"); } return 0;}
1 0
- CCF俄罗斯方块201604-2
- CCF-201604-2-俄罗斯方块
- CCF-201604-2-俄罗斯方块
- CCF 201604-2 俄罗斯方块
- ccf 201604-2 俄罗斯方块
- CCF 201604-2 俄罗斯方块
- CCF 201604-2 俄罗斯方块
- CCF 俄罗斯方块(201604-2)
- CCF 201604-2 俄罗斯方块
- CCF 201604-2 俄罗斯方块
- 201604-2 俄罗斯方块 ccf
- CCF 201604-2 俄罗斯方块
- CCF 201604-2 俄罗斯方块
- CCF认证201604-2 俄罗斯方块
- CCF-201604-2 俄罗斯方块(模拟)
- CCF认证 201604-2 俄罗斯方块
- CCF 201604-2 俄罗斯方块 题解
- 201604-2 俄罗斯方块(java) CCF
- JVM工作原理
- SSL证书
- Java enum 的设计原理
- 在netbeans下运行和调试maven管理下的javaEE项目
- Android 隐藏java代码
- ccf 201604-2 俄罗斯方块
- 从GLM广义线性模型到线性回归、二项式及多项式分类——机器学习笔记整理(一)
- 当函数模板遇到普通函数
- Android扁平化输入框和按钮(登录界面)
- MVC框架
- 字典序字符串
- IOS 初学 runtime 自定义Button实现按钮图片在上文字在下
- 51Nod-1337-翻转游戏
- ORACLE中实现类似SQLSERVER中IDENTITY(1,1)序号自增的功能