阅读背景:

第十五届中北大学算法与程序设计竞赛(公开赛)A模拟 C(差分+贪心)D(线段树) E数学 F(线段树) G贪心 H (dp) I (KM算法) K 线段树 L 容斥

来源:互联网 

题目链接

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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: