俄罗斯方块
问题描述
试题编号: | 201604-2 |
试题名称: | 俄罗斯方块 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游戏。 输入格式 输入的前15行包含初始的方格图,每行包含10个数字,相邻的数字用空格分隔。如果一个数字是0,表示对应的方格中没有方块,如果数字是1,则表示初始的时候有方块。输入保证前4行中的数字都是0。 输出格式 输出15行,每行10个数字,相邻的数字之间用一个空格分隔,表示板块下落后的方格图。注意,你不需要处理最终的消行。 样例输入 0 0 0 0 0 0 0 0 0 0 样例输出 0 0 0 0 0 0 0 0 0 0 |
//AC了的代码
/* CCF201604-2 俄罗斯方块 */
#include <iostream>
using namespace std;
int main()
{
int box[17][11];
int board[5][5];
//15*10
for(int i=1; i<=15; i++)
for(int j=1; j<=10; j++)
cin >> box[i][j];
int k = 0;
//4*4
for(int i=1; i<=4; i++){
int cnt = 0;
for(int j=1; j<=4; j++){
cin >> board[i][j];
if(board[i][j])
cnt++;
}
//去除一行全为0的
if(cnt){
k++;
for(int j=1; j<=4; j++){
board[k][j] = board[i][j];
}
// cout << "first" << endl;
}
else continue;
}
/* for(int i=1; i<=k; i++){
for(int j=1; j<=4; j++){
cout << " " << board[i][j] << " ";
}
cout << " test "<< endl;
}*/
int s;
cin >> s;
int p, q, j;
//cout << box[11][7]<< endl;
// for(int i=15; i>=0; i--){
for(int i=1; i<=15-k+1; i++){
int temp[17][11] = {0};
int sign = 0;
for(p = i, q=1; p<=i+k-1; p++, q++){
for(j=s; j<=s+3; j++){
temp[p][j] = box[p][j]+board[q][j-s+1];
// cout << p << " " << j << " "<< temp[p][j] << " " << endl;
if(temp[p][j] > 1)//加和为二说明走不下去
break;
sign++;
}
if(temp[p][j] > 1)
break;
}
//可以下到第i层
if(sign == k*4){
int t = i, sign2=0;
//判断是否可以下到i+1层
int temp2[17][11] = {0};
if(t+1 <= 15-k+1)
for(p = t+1, q=1; p<=t+k; p++, q++){
for(j=s; j<=s+3; j++){
temp2[p][j] = box[p][j]+board[q][j-s+1];
// cout <<box[p][j] << " " << board[q][j-s+1] << " " << temp[p][j] << " " << endl;
if(temp2[p][j] > 1)
break;
sign2++;
}
if(temp2[p][j] > 1)
break;
}
//可以下,则继续
if(sign2 == k*4)
{
// i++;
continue;
}
//不可以,则将temp放到对应的位置,输出
//cout << i << endl;
for(p = i; p<=i+k-1; p++){
for(j=s; j<=s+3; j++){
box[p][j] = temp[p][j];
// cout <<p << " " <<j << " "<< temp[p][j] << " ";
}
cout << "second" << endl;
}
//输出
for(int i=1; i<=15; i++){
for(int j=1; j<=10; j++){
cout<< box[i][j] << " ";
}
cout << endl;
}
break;
}
}
return 0;
}
//40分 从下往上摆 有特例情况
/* CCF201604-2 俄罗斯方块 */
#include <iostream>
using namespace std;
int main()
{
int box[17][11];
int board[5][5];
for(int i=1; i<=15; i++)
for(int j=1; j<=10; j++)
cin >> box[i][j];
int k = 0;
for(int i=1; i<=4; i++){
int cnt = 0;
for(int j=1; j<=4; j++){
cin >> board[i][j];
if(board[i][j])
cnt++;
}
if(cnt){
k++;
for(int j=1; j<=4; j++){
board[k][j] = board[i][j];
}
// cout << "first" << endl;
}
else continue;
}
int s;
cin >> s;
int p, q, j;
for(int i=15; i>=0; i--){
int temp[17][11] = {0};
int sign = 0;
for(p = i-k+1, q=1; p<=i; p++, q++){
for(j=s; j<=s+3; j++){
temp[p][j] = box[p][j]+board[q][j-s+1];
// cout <<box[p][j] << " " << board[q][j] << " " << temp[p][j] << " " << endl;
if(temp[p][j] > 1)
break;
sign++;
}
if(temp[p][j] > 1)
break;
}
if(sign == k*4){
int t = i;
for(p = i-k+1; p<=i; p++){
for(j=s; j<=s+3; j++){
box[p][j] = temp[p][j];
// cout << temp[p][j] << " ";
}
// cout << "second" << endl;
}
//输出
for(int i=1; i<=15; i++){
for(int j=1; j<=10; j++){
cout << box[i][j] << " ";
}
cout << endl;
}
break;
}
}
return 0;
}
上一篇: 俄罗斯方块
下一篇: FlutterUtils快速开发工具类