您的位置:首页 > 移动开发

codeforces #549G Happy Line

2015-06-12 18:23 232 查看
题意:

给你一个序列 ,让后可以进行改动 改动为 前者减一后者加一, 然后前后交换,问是否可以改变为非递减序列

题解:

改动规则很简单, 要后移 则权值加一,前进则权值减一,可以发现无论如何移动 每个点的权值加上下标都是不变的。

所以进行一下处理,排序,如果有权值加上下标相等的,则无法改变为非递减序列

代码:、

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<algorithm>

#include<map>

using namespace std;

map<int, int> mark;

int main()

{

int n, a, value[200005];

while(scanf("%d", &n) != EOF)

{

mark.clear();

int flag = 0;

for(int i = 0; i < n; i++)

{

scanf("%d", &a);

value[i] = a + i;

if(mark[a+i]) flag = 1;

mark[a+i] = 1;

}

if(flag) printf(":(");

else

{

sort(value, value + n);

printf("%d", value[0]);

for(int i = 1; i < n; i++)

printf(" %d", value[i] - i);

}

printf("\n");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: