201604-2 俄罗斯方块 100分 0ms

点击前往试题目录:https://blog.csdn.net/best335/article/details/99550556
在这里插入图片描述

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	int A[18][10],B[4][4],C,f=-1;//A原始画板 B要放的图案 C开始列数 f有效图案行数
	memset(A,0,sizeof(A));
	for(int i=0;i<15;++i)
		for(int j=0;j<10;++j)
			cin>>A[i][j];
	for(int i=0;i<4;++i)
		for(int j=0;j<4;++j)
			cin>>B[i][j],f=B[i][j]==1?i:f;
	cin>>C,--C,++f;
	for(int R=0;R<15;++R){//尝试一行一行放
		bool F=true;
		for(int i=R,ni=R+4,xi=0;i<ni&&F;++i,++xi)
			for(int j=C,nj=C+4,xj=0;j<nj&&F;++j,++xj){
				if(A[i][j]==1&&B[xi][xj]==1) F=false;
			}
		if(!F){//这行就放不下
			for(int i=R-1,ni=i+4,xi=0;i<ni;++i,++xi)
				for(int j=C,nj=C+4,xj=0;j<nj;++j,++xj)
					if(B[xi][xj]==1) A[i][j]=1;
			break;
		}
		else if(R==14){//都能放下就落到底部
			for(int i=15-f,xi=0,ni=i+f;i<ni;++i,++xi)
				for(int j=C,xj=0,nj=C+4;j<nj;++j,++xj)
					if(B[xi][xj]==1)
						A[i][j]=1;
		}
	}
	for(int i=0;i<15;++i){
		for(int j=0;j<10;++j)
			cout<<(j==0?"":" ")<<A[i][j];
		cout<<endl;
	}
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值