试题编号: | 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<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
int loc[15][10];
int input[4][4];
int obj[15][4];
void output(int loc[][10],int n)
{
for(int i=0;i<15;i++)
for(int j=n-1,k=0;j<n+3;j++,k++)
obj[i][k] = loc[i][j];
}
int change(int obj[][4],int input[][4],int n)
{
bool isok(int obj[][4]);
void output(int loc[][10],int n);
int flag=0;
for(;isok(obj)>0;flag++)
{
output(loc,n);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
obj[i+flag][j] += input[i][j];
}
flag -= 2;
output(loc,n);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
obj[i+flag][j] += input[i][j];
return flag;
}
bool isok(int obj[][4])
{
bool flag=1;
for(int i=0;i<15;i++)
for(int j=0;j<4;j++)
if(obj[i][j]>1)
flag = 0;
return flag;
}
int main()
{
// freopen("D:\\Desktop\\tom.txt","r",stdin);
for(int i=0;i<15;i++)
for(int j=0;j<10;j++)
cin>>loc[i][j];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
cin>>input[i][j];
int n;
cin>>n;
output(loc,n);
change(obj,input,n);
for(int i=0;i<15;i++)
for(int j=n-1,k=0;j<n+3;j++,k++)
loc[i][j] = obj[i][k];
for(int i=0;i<15;i++) //printf
{
for(int j=0;j<10;j++)
cout<<loc[i][j]<<" ";
if(i!=14)
cout<<"\n";
}
return 0;
}