试题编号: | 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 |
代码:
#include<bits/stdc++.h>
using namespace std;
int a[20][20],temp[20][20];
int b[6][6];
int t;
bool vst[20][20];
struct po{
int x;int y;
po(int xx,int yy){
x=xx;
y=yy;
}
};
vector<po>ve;
bool judge(){
for(int i=1;i<=4;i++){
if(a[ve[i].x+1][ve[i].y]==1||ve[i].x+1>15){
return false;
}
}
return true;
}
int main(){
ve.push_back(po(0,0));
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
cin>>b[i][j];
}
}
cin>>t;
for(int i=1;i<=4;i++){
for(int j=1;j<=4;j++){
if(b[i][j]==1){
ve.push_back(po(i,j+t-1));
}
}
}
int flag=0;
while(true){
if(judge()){
for(int i=1;i<=4;i++){
ve[i].x++;
}
}else{
flag=1;
for(int i=1;i<=4;i++){
a[ve[i].x][ve[i].y]=1;
}
}
if(flag)break;
}
for(int i=1;i<=15;i++){
for(int j=1;j<=10;j++){
if(j==1)cout<<a[i][j];
else cout<<" "<<a[i][j];
}
cout<<endl;
}
return 0;
}
/*
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 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 0
0 0 1 1
0 0 0 0
3
*/