刷CCF的算法题(第十四天)
2017-08-30 00:30
225 查看
问题描述
今晚写的代码如下,后续可能会修改:
#include <bits/stdc++.h>
using namespace std;
const int BoardRow = 15;
const int BoardCol = 10;
const int PlateRow = 4;
const int PlateCol = 4;
int main () {
int i, j;
bool board[BoardRow][BoardCol];
for (i = 0; i < BoardRow; ++i) {
for (j = 0; j < BoardCol; ++j) {
cin >> board[i][j];
}
}
bool plate[PlateRow][PlateCol];
for (i = 0; i < PlateRow; ++i) {
for (j = 0; j < PlateCol; ++j) {
cin >> plate[i][j];
}
}
int LeftCol;
cin >> LeftCol;
for (i = 0; i < 4; ++i) {
plate[i][1] += LeftCol - 1;
}
while (1) {
for (i = 0; i < 4; ++i) {
if (board[plate[i][0] + 1][plate[i][1]]) {
goto there;
}
}
for (i = 0; i < 4; ++i) {
plate[i][0]++;
}
}
there:
for (i = 0; i < 4; ++i) {
board[plate[i][0]][plate[i][1]] = 1;
}
for (i = 1; i <= 15; ++i) {
for (j = 1; j <= 10; ++j) {
cout << board[i][j] << ' ';
}
cout << endl;
}
return 0;
}
试题编号: | 201604-2 |
试题名称: | 俄罗斯方块 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 游戏在一个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 |
#include <bits/stdc++.h>
using namespace std;
const int BoardRow = 15;
const int BoardCol = 10;
const int PlateRow = 4;
const int PlateCol = 4;
int main () {
int i, j;
bool board[BoardRow][BoardCol];
for (i = 0; i < BoardRow; ++i) {
for (j = 0; j < BoardCol; ++j) {
cin >> board[i][j];
}
}
bool plate[PlateRow][PlateCol];
for (i = 0; i < PlateRow; ++i) {
for (j = 0; j < PlateCol; ++j) {
cin >> plate[i][j];
}
}
int LeftCol;
cin >> LeftCol;
for (i = 0; i < 4; ++i) {
plate[i][1] += LeftCol - 1;
}
while (1) {
for (i = 0; i < 4; ++i) {
if (board[plate[i][0] + 1][plate[i][1]]) {
goto there;
}
}
for (i = 0; i < 4; ++i) {
plate[i][0]++;
}
}
there:
for (i = 0; i < 4; ++i) {
board[plate[i][0]][plate[i][1]] = 1;
}
for (i = 1; i <= 15; ++i) {
for (j = 1; j <= 10; ++j) {
cout << board[i][j] << ' ';
}
cout << endl;
}
return 0;
}
相关文章推荐
- CCF 201412-4 最优灌溉(最小生成树,prime算法,kurskal算法)
- ccf认证题-矩阵(超时只有40分,矩阵快速幂算法)
- 刷CCF算法题(第四天)
- 算法系列15天速成——第十四天 图【上】
- 算法日记(Java实现)第20160904(6)期——CCF俄罗斯方块
- 算法系列15天速成——第十四天 图【上】
- 刷CCF的算法题(第五天)
- 刷CCF的算法题(第一天)
- CCF 其他简单问题算法思想
- CCF ADL 78 深度学习讲习班回顾:这几个大热领域的算法到应用,8位学术大牛带你掌握人工智能前沿技术
- CCF 201703-5 引水入城(最大流问题:EK算法,BFS 50分)(Dinic算法 40分)
- 刷CCF的算法题(第三天)
- 算法系列15天速成——第十四天 图【上】
- ccf c++ 分蛋糕算法
- 刷CCF的算法题(第十二天)
- 刷CCF的算法题(第八天)
- 刷CCF的算法题(第十天)
- 算法系列15天速成 第十四天 图【上】
- 算法系列15天速成——第十四天 图【上】
- 算法系列15天速成——第十四天 图【上】