试题编号: | 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 <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <time.h>
#include <vector>
#include <list>
using namespace std;
int main()
{
int i, j, N, Max = 0;
bool Data[16][11], In[5][5];
int Lie, Base[4], Down[4];
for (i = 1; i <= 15; i++)
{
for (j = 1; j <= 10; j++)
cin >> Data[i][j];
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
cin >> In[i][j];
}
cin >> Lie;
for (i = 0; i < 4; i++)
{
int k = 4;
for (j = 3; j >= 0; j--)
{
if (In[j][i])
break;
else
k = j;
}
if (k == 0)
k = -100;
Down[i] = k;
//cout << k << ' ';
}
//cout << endl;
for (i = Lie; i < Lie + 4; i++)
{
int k = 0;
for (j = 1; j <= 15; j++)
{
if (Data[j][i])
break;
else
k++;
}
Base[i - Lie] = k;
//cout << k << ' ';
}
/* cout << endl*/;
int Min = 0;
for (i = 1; i < 4; i++)
{
if (Base[i] - Down[i] < Base[Min] - Down[Min])
Min = i;
}
int ADD = Base[Min] - Down[Min] + 1;
//cout << Min<< ' '<<ADD << endl;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (In[i][j])
Data[ADD + i][j + Lie] = 1;
}
}
for (i = 1; i <= 15; i++)
{
for (j = 1; j <= 10; j++)
cout << Data[i][j] << " ";
cout << endl;
}
cin >> N;
return 0;
}