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");
}
}
给你一个序列 ,让后可以进行改动 改动为 前者减一后者加一, 然后前后交换,问是否可以改变为非递减序列
题解:
改动规则很简单, 要后移 则权值加一,前进则权值减一,可以发现无论如何移动 每个点的权值加上下标都是不变的。
所以进行一下处理,排序,如果有权值加上下标相等的,则无法改变为非递减序列
代码:、
#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");
}
}
相关文章推荐
- 如何使用Android MediaStore裁剪大图片
- 实现Activity的滑动返回效果
- IOS 需要学习的地方
- iBokan_ios80_自学系列_1(循环结构初练)
- 在Android studio 中配置高德地图api后显示地图遇到的问题
- IOS 调试lldb命令常用----po
- iOS scrollsToTop属性失效
- android实现程序开机自启动
- iOS 项目中用到的一些开源库和第三方组件
- Android内存泄露优化总结
- Objective_C学习笔记(2)类的使用学习概要
- iOS Code Signing 学习笔记
- Android开发者必须深入学习的10个应用开源项目
- Mybatis写mapper映射文件中的注意事项
- OS开发实践:用Swift和Core Animatoin创建圆形图片加载动画
- android,[游戏] 美女擦玻璃游戏源码
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- Android之Handler的postDelayed()方法的用法
- 将VC++黑白屏蔽图转换为Cocos2dx中可用的png
- Android CountDownTimer倒计时器的使用