傳送門
題意:
一行數字可以前後交換,交換後,之前在前面的數字+1,之前在後面的數字-1,問是否可以將這一行數字通過交換使得得到一行單調上升的數字
題解:
可以發現交換前後數字都只改變1
不妨將數字的下標考慮進來,先不考慮1,直接交換
,可以發現我們交換後再減去下標就是上面的式子
所以原來的1就可以等價爲直接交換
考慮到這樣一個事實我們先給再排序後由於整體單增再減,也是單增的,即可以貪心
代碼:
#include"iostream"
#include"algorithm"
#include"stdio.h"
using namespace std;
int a[200005];
int main()
{
// freopen("text.in","r",stdin);
int n;scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]+=i;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)a[i]-=i;
for(int i=2;i<=n;i++)if(a[i]<a[i-1]){printf(":(");return 0;}
for(int i=1;i<=n;i++)printf("%d ",a[i]);
return 0;
}