CF1227G Not Same 题解
构造。考虑按照每个数字进行考虑,每次填充一列。
观察样例 ,不难发现可以构造使每一行或列一定有一个位置为 。我们不妨对于每一列限定这个 的位置,使其与任意一个列的位置不一样。不难发现这样也保证了每一行 位置的不同。然后,我们强制至少一个其他列在这个位置填上 ,即可保证每一行互不相同。
这是很好维护的。我们只需要对于第 列,从第 行开始往下顺着填。如果超出了 行,就填到上面。为了满足至少一个其他列在这个位置填上 ,我们把原数组从大到小排序,手玩一下发现一定满足条件。这题就做完了。
时间复杂度 。
#include <bits/stdc++.h>
using namespace std;
struct val
{
long long v,p;
}a[2000];
long long n,y[2000],ans[2000][2000];
bool cmp(struct val a,struct val b)
{
return a.v>b.v;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i].v),a[i].p=i;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)y[a[i].p]=i;
for(int i=1;i<=n;i++)
{
long long j=i;
while(a[i].v)
{
ans[j][i]=1,a[i].v--,j++;
if(j>n+1)j=1;
}
}
printf("%lld\n",n+1);
for(int i=1;i<=n+1;i++)
{
for(int j=1;j<=n;j++)
printf("%lld",ans[i][y[j]]);
printf("\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探