题解 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;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!