题解 CF432E 【Square Tiling】

概述

题号 难度 \(AC\)时间及记录
\(\texttt{CF432E}\) \(\texttt{CF难度:2300}\) \(\texttt{On 2020/11/02}\)

解析

思路

这道题目,我们不难想到贪心
我们每次找到当前能放进去的边长最大的正方形,把它放进去
并使字典序尽量地小即可

代码实现时的具体步骤

找一个点切进去

看看它的最佳答案是多少

以它为顶点向外扩张成一个最大的正方形

标记好答案

输出整张答案地图\(\texttt{(这里记得类型转换)}\)

代码

#include<bits/stdc++.h>
using namespace std;
int Line,Column;
int Dp[101][101]; 
inline int Dfs(int X,int Y)
{
	if(Dp[X][Y])
	{
		return Dp[X][Y];
	}
	register int i;
	for(i=1;i<=26;i++)
	{
		if(Dp[X-1][Y]!=i&&Dp[X][Y-1]!=i&&Dp[X+1][Y]!=i&&Dp[X][Y+1]!=i)
		{
			return i;
		}
	}
}
int main(void)
{
	register int i,j,k,l;
	cin>>Line>>Column;
	for(i=1;i<=Line;i++)
	{
		for(j=1;j<=Column;j++)
		{
			if(Dp[i][j])
			{
				continue;
			}
			register int Dfsed;
			Dfsed=Dfs(i,j);
			register int Tmp;
			Tmp=0;
			while(Dfs(i,j+Tmp)==Dfsed&&i+Tmp<=Line&&j+Tmp<=Column)
			{
				Tmp++;
			}
			for(k=i;k<i+Tmp;k++)
			{
				for(l=j;l<j+Tmp;l++)
				{
					Dp[k][l]=Dfsed;
				}
			}
		}
	}
	for(i=1;i<=Line;i++)
	{
		for(j=1;j<=Column;j++)
		{
			cout<<(char)(Dp[i][j]+'A'-1);
		}
		cout<<endl;
	}
	return 0;
}
posted @ 2020-11-02 15:35  Bushuai_Tang  阅读(93)  评论(0编辑  收藏  举报