CF549GHappy Line
Posted Syara
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF549GHappy Line相关的知识,希望对你有一定的参考价值。
首先你直接模拟复杂度上天,不能通过此题。
由于有解时最后单调不降,那么我们考虑排序。
排什么?找不变量。
假设当前 \\(a_i,a_i+1\\) 需要进行操作。
那么结果变成 \\(a_i+1+1,a_i-1\\)。
\\(a_i+1\\) 原 \\(pos_1=i+1\\),值 \\(val_1\\) 为 \\(a_i+1\\) ,更改后 \\(pos_2=i\\),\\(val_2\\) 为 \\(a_i+1+1\\)。
不难发现 \\(val_1+pos_1=val_2+pos_2\\)。
不难推出,对于任意 \\(a_i\\),\\(val+pos\\) 是定值。
我们将 \\(a_i+i\\) 排序得到序列 \\(b\\),输出 \\(b_i-i\\)。
不难发现无解情况是有 \\(b_i=b_i+1\\mid 1\\le i<n\\)。
#include <stdio.h>
#include <algorithm>
int n,i;
int a[200005];
int main()
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",a+i);
a[i]+=i;
std::sort(a+1,a+n+1);
for(i=1;i<n;++i)
if(a[i]==a[i+1])
puts(":(");
return 0;
for(i=1;i<=n;++i)
printf("%d ",a[i]-=i);
return 0;
以上是关于CF549GHappy Line的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 549G Happy Line[问题转换 sort]