CCF CSP 201604-2 俄罗斯方块

mac2024-05-29  54

思路:

1.用数组存储原来的方格和即将落下的方格; 2.从下往上搜原来的方格的底边(即最下面的、开始有1的行); 3.然后一层一层模拟下降,正在落下的方格和目前方格对应的界面上的4*4区域里,不能有重叠即可;

代码:

#include<bits/stdc++.h> using namespace std; #define rp(i,n) for(int i=0;i<n;i++) int table[15][10]; int mat[4][4]; int main(){ rp(i,15) rp(j,10) cin>>table[i][j]; rp(i,4) rp(j,4) cin>>mat[i][j]; int left; cin>>left; left--; int but;//新方格最下方有方块的位置; for(but=3;but>=0;but--){ rp(i,4) if(mat[but][i]) goto out1; }out1:; int i; for(i=but;i<=14;i++){ rp(j,but+1) rp(k,4){//table[i-j][left+k]和mat[but-j][k]不都为1即可 if(table[i-j][left+k]&&mat[but-j][k]) goto out2; } }out2:i--; rp(j,but+1) rp(k,4){ if(mat[but-j][k]) table[i-j][left+k]=1; } rp(i,15){ cout<<table[i][0]; for(int j=1;j<10;j++) cout<<' '<<table[i][j]; putchar('\n'); } return 0; }
最新回复(0)