P15421 像你这样的朋友
· One min read
题意简述
在 的 网格中尽可能多填入 ,使得选取任意一个 上下左右移动一步后,都不会出现横向或纵向连续 个 。
填入 个 可以获得 分基础分,超出部分可以获得附加分。
解题思路
我们可以将每个格子 按照 划分为 个集合。显然在每个集合内,连续 个格子至多有 个 ,因此任意一个集合填入 都满足条件。根据鸽巢原理,最大集合的大小为 ,即可获得 分基础分。
参考代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
for(int n=1;n<=270;n++)
{
int t=(n+1)%3;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<((i+j)%3==t?'x':'o');
}
cout<<'\n';
}
}
return 0;
}