201604-2-俄罗斯方块-CCF

题目:http://118.190.20.162/view.page?gpid=T41
涉及知识:简单模拟

解题思路:模拟方块下降过程。
 

#include
#include
using namespace std;
#define per(i,a,b) for(int i=a;i=a;i--)
const int C=10;
const int R=15;
const int N=4;
int f[R+1][C];
int b[N][N];
struct Block{
    int row;
    int col;
}B[N];
int main(){
    per(i,0,R)
    per(j,0,C)
    cin>>f[i][j];
    per(i,0,N)
    per(j,0,N)
    cin>>b[i][j];
    int col;
    cin>>col;
    per(i,0,C)
    f[R][i]=1;
    ///统计小方块中存在小小方块行列坐标
    int k=0;
    rep(i,N-1,0)
    per(j,0,N){
        if(b[i][j]){

            B[k].row=i;
            B[k].col=j;
            k++;
        }
    }
    ///模拟下落
    int row=1;
    col--;
    int flag;
    while(true){
      flag=false;
      per(i,0,N){
        if(f[row+B[i].row][col+B[i].col]){
        flag=true;
        break;
        }
     }
     if(flag) break;
     row++;
    }
    row--;
    ///小方块复制到大方块
    per(i,0,k){
      f[row+B[i].row][col+B[i].col]=1;
    }
    per(i,0,R)
    per(j,0,C){
        cout<

这是我第二次写的(100分),以下是我第一次写的70分,思路错了(想的太复杂),读者不必看,贴在这就仅做个记录。

#include
#include
#include
#include
using namespace std;
int b[16][11];
int t[4][4];
int n;
int main(){
    for(int i=0;i<15;i++){
        for(int j=0;j<10;j++){
            cin>>b[i][j];
        }
    }
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            cin>>t[i][j];
        }
    }
    cin>>n;
    int row,col;
    int r[4],c[4],i=0;
    int tr[4],tc[4];
    for(col=n-1;col=abs(tr[i]-r[i])&&tc[i]>=tr2){
            minr=abs(tr[i]-r[i]);
            k=i;
            tr2=tc[i];
        }
    }
    int max1=0;
    for(int i=0;i<4;i++){
        max1=max(max1,tr[i]);
    }
    int tr0=max1-tr[k];
    int r0=r[k]-1+tr0;
    cout<<"k="<


 

你可能感兴趣的:(c/c++基础,C++)