感觉是时候做一发小游戏了…这道题居然wa了两发…感觉好sad……
思路的话,就找到下落方块的边界值,然后遍历一下地图就好…
#include <cstdio>
#include <iostream>
using namespace std;
int s[16][11],a[5][5];
int main()
{
for(int i=0;i<15;i++) for(int j=0;j<10;j++) cin>>s[i][j];
int l=0,t=3;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
cin>>a[i][j];
for(int i=0,j;i<4;i++)
{
for(j=0;j<4;j++) if(a[j][i]) break;
if(j>=4) l++;
else break;
}
for(int i=3,j;i>=0;i--)
{
for(j=0;j<4;j++) if(a[i][j]) break;
if(j>=4) t--;
else break;
}
int n;
cin>>n;
n=n-1+l;
int i;
for(i=3;i<15;i++)
{
int ff=0;
for(int j=t,k=i;j>=0;j--,k--)
{
for(int p=n,q=l;q<4;q++,p++)
{
if(a[j][q]&&s[k][p]) {ff=1;break;}
}
if(ff) break;
}
if(ff)
{
i--;
for(int j=i,k=t;k>=0;k--,j--)
{
for(int p=n,q=l;q<4;q++,p++)
{
s[j][p]|=a[k][q];
}
}
break;
}
}
if(i>=15)
{
for(int j=i-1,k=t;k>=0;k--,j--)
{
for(int p=n,q=l;q<4;q++,p++)
{
s[j][p]|=a[k][q];
}
}
}
for(int i=0;i<15;i++) {for(int j=0;j<10;j++) cout<<s[i][j]<<" ";cout<<endl;}
return 0;
}