CCF-CSP-2016-04-2俄罗斯方块

链接:http://118.190.20.162/view.page?gpid=T41

思路:有点坑的大模拟,模拟俄罗斯方块下落的过程,从上到下依次拿小矩形最左边的点去枚举判断,找到当前行可以下落的最低位置后输出

代码:

#include<bits/stdc++.h>

using namespace std;
int a[50][50];
int b[50][50];
bool check(int x,int y){
    for(int l=1;l<=4;l++)
        for(int r=1;r<=4;r++){
            if(a[x+l-1][y+r-1]+b[l][r]>=2)return false;
        }
        return true;
}
int main (){
    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];
    int y;cin>>y;
    int num=0;
    for(int i=4;i>=1;i--){
        int ans=0;
        for(int j=1;j<=4;j++){
            ans+=b[i][j];
        }
        if(ans!=0)break;
        else num++;
    }
    num+=12;
    int atm=0;
    for(int i=0;i<=num;i++){
        if(check(i,y)){
           atm=i;
        }
        else break;
    }
     for(int l=1;l<=4;l++)
            for(int r=1;r<=4;r++){
                a[atm+l-1][y+r-1]+=b[l][r];
            }
    for(int i=1;i<=15;i++){
        for(int j=1;j<=10;j++)
            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 1 0 0 0
0 0 0 0 1 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 0 0 0 1 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 1
0 0 0 1
0 0 0 0
1
*/
上一篇:CCF-CSP-2016-12-2工资计算


下一篇:CCF-CSP-2016-09-1最大波动