题目链接
A-俄罗斯方块
做法:简单模拟
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
#define inf 1e9
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
inline ll read()
{
ll x=0,w=1; char c=getchar();
while(c<'0'||c>'9') {if(c=='-') w=-1; c=getchar();}
while(c<='9'&&c>='0') {x=(x<<1)+(x<<3)+c-'0'; c=getchar();}
return w==1?x:-x;
}
int n;
int a[15][15];
int row[15];
int main()
{
n=read();
rep(i,1,10) row[i]=10;
rep(j,1,n)
{
int ty=read(),x=read();
if(ty==1){
//(i-1,x) (i-1,x+1)
//(i,x) (i,x+1)
per(i,row[x],1){
if(!a[i][x]&&!a[i][x+1]&&!a[i-1][x]&&!a[i-1][x+1]){
a[i][x]=a[i][x+1]=a[i-1][x]=a[i-1][x+1]=1;
row[x]=i-2;
row[x+1]=i-2;
break;
}
}
}
else if(ty==2){
//a[i-1][x]
//a[i][x] a[i][x+1] a[i][x+2]
per(i,row[x],1)
if(!a[i][x]&&!a[i][x+1]&&!a[i][x+2]&&!a[i-1][x]){
a[i][x]=a[i][x+1]=a[i][x+2]=a[i-1][x]=1;
row[x]=i-2;
row[x+1]=i-1;
row[x+2]=i-1;
break;
}
}
else if(ty==3){
//(i,x) (i,x+1) (i,x+2) (i,x+3)
per(i,row[x],1)
if(!a[i][x]&&!a[i][x+1]&&!a[i][x+2]&&!a[i][x+3]){
a[i][x]=a[i][x+1]=a[i][x+2]=a[i][x+3]=1;
row[x]=i-1;
row[x+1]=i-1;
row[x+2]=i-1;
row[x+3]=i-1;
break;
}
}
else if(ty==4){
// (i-1,x+1)
//(i,x)(i,x+1)(i,x+2)
per(i,row[x],1)
if(!a[i][x]&&!a[i][x+1]&&!a[i][x+2]&&!a[i-1][x+1]){
//printf("i:%d x:%d\n",i,x);
a[i][x]=a[i][x+1]=a[i][x+2]=a[i-1][x+1]=1;
row[x]=i-1;
row[x+1]=i-2;
row[x+2]=i-1;
break;
}
}
}
//printf("dddd%d\n",a[10][1]);
rep(i,1,10)
{
rep(j,1,10) printf("%d%c",a[i][j],j==10?'\n':' ');
//puts("");
}
}
/*
2 1
2 2
1 1
3 3
*/
#pragma