ppt做视频模板下载网站有哪些,建筑英才网和中国建筑人才网,合肥公司网站设计,在微信上做彩票网站吗题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢帕基特诺夫发明的一款休闲游戏。 游戏在一个15行10列的方格图上进行#xff0c;方格图上的每一个格子可能已经放置了方块#xff0c;或者没有放置方块。每一轮#xff0c;都会有一个新的由4个小方块组成的板块从方格图的上方…题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 游戏在一个15行10列的方格图上进行方格图上的每一个格子可能已经放置了方块或者没有放置方块。每一轮都会有一个新的由4个小方块组成的板块从方格图的上方落下玩家可以操作板块左右移动放到合适的位置当板块中某一个方块的下边缘与方格图上的方块上边缘重合或者达到下边界时板块不再移动如果此时方格图的某一行全放满了方块则该行被消除并得分。 在这个问题中你需要写一个程序来模拟板块下落你不需要处理玩家的操作也不需要处理消行和得分。 具体的给定一个初始的方格图以及一个板块的形状和它下落的初始位置你要给出最终的方格图。 输入格式 输入的前15行包含初始的方格图每行包含10个数字相邻的数字用空格分隔。如果一个数字是0表示对应的方格中没有方块如果数字是1则表示初始的时候有方块。输入保证前4行中的数字都是0。 输入的第16至第19行包含新加入的板块的形状每行包含4个数字组成了板块图案同样0表示没方块1表示有方块。输入保证板块的图案中正好包含4个方块且4个方块是连在一起的准确的说4个方块是四连通的即给定的板块是俄罗斯方块的标准板块。 第20行包含一个1到7之间的整数表示板块图案最左边开始的时候是在方格图的哪一列中。注意这里的板块图案指的是16至19行所输入的板块图案如果板块图案的最左边一列全是0则它的左边和实际所表示的板块的左边是不一致的见样例 输出格式 输出15行每行10个数字相邻的数字之间用一个空格分隔表示板块下落后的方格图。注意你不需要处理最终的消行。 样例输入 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 3 样例输出 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 0 0 题意理解
这题的主要点还是在读懂题吧这是16年csp的第二题肯定是可以做的所以心态要好
题目意思是给出一个方格图给出一个符合俄罗斯方块规则的板块给出下坠的列坐标模拟填充该板块进入方格图的最终形态
而题目中那句注意如果最左侧全为0则说明这一列不是板块的左边界这是保证对板块定义更明确因为常理上一个板块的最左边一定是由最左的方块的位置决定而不是由这个矩阵 j0 决定
其实更简单理解一点如果从第pix列开始下坠矩阵中的列坐标换算成方格图的坐标就应该初始为pot[i][1] pix-1而行坐标则应该初始为方格图的上界以上这里可以初始为pot[i][0]-4
只要保证矩阵中最下面的点一开始也不会出现在方格里就行。
模拟过程判断当前四个点能否下坠如果可以则横坐标集体加一否则直接将当前在方格图里的点改写为1。用一个简单的while循环就可以完成
AC代码
#includeiostream
using namespace std;
char tmp[15][11]{0};
int main() {int pot[4][2]{0},cnt0,pix0; // pot只记录四个为1的点的横纵坐标ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);for(int i 0;i15;i){for(int j 0;j10;j){cintmp[i][j];}}for(int i 0;i4;i){for(int j 0;j4;j){int x;cinx;if(x 1){pot[cnt][0] i-4;pot[cnt][1] j;cnt;}}}cinpix;for(int i 0;icnt;i){pot[i][1] pix-1;}while(1){bool fair true;for(int i 0;icnt;i){int x pot[i][0]1;int y pot[i][1];if( x0 tmp[x][y]1)fair false; //当板块从外界进入方格且触碰到有方块的格子则整体无法移动if( x 15 )fair false;//当板块某个点从下方出界整体无法移动}if(fair false){ // 如果无法移动就将当前位置更新到方格中for(int i 0;icnt;i){int x pot[i][0],y pot[i][1];if(x0)tmp[x][y] 1; //这里更新只需要保证当前点在方格图中这里不存在下出界的情况}break;}else { //否则整体下移for(int i 0;icnt;i){pot[i][0];}}}for(int i 0;i15;i){for(int j 0;j10;j){couttmp[i][j];if(j9)cout ;}if(i14)cout\n;}return 0;
}