$CF1141C Polycarp Restores Permutation$
\(problem\)
这题的大致意思就是已知数值差值 求1-n的排列
如果能构成排列 则输出这个排列。如果不能则输出-1
排列的值都是 大于1 而小于n的 而且没有相同的数字。
这题最关键的是 怎么输出这个序列 有的是存在负数的。
那么 考虑一下排列都是从1到n的对不对。
取序列的最小值 然后用\(1 - Min\)即是整个序列应该加上的数值。
首先考虑判重。 用数组 或者用\(Map\) \(or\) \(Set\) 。
都是不错的方法。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() { LL res(0),f(1); register char c ;
while(isspace(c=getchar())) ; c == '-'? f = -1 , c = getchar() : f = 1 ;
while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ; return res * f ;
}
int n ;
int p[200000+5] ;
int res[200000+5] ;
set<int> s;//判重
signed main(){
n = In() ;
for(register int i=1;i<=n-1;i++) p[i] = In() ;
res[1] = 0 ;
for(register int i=2;i<=n;i++) res[i] = res[i-1] + p[i-1] ;//计算前缀和
int Min = 0x7f7f7f7f;
for(register int i=1;i<=n;i++){
Min = min(res[i],Min);
if(s.count(res[i])==0) s.insert(res[i]) ;//插入数值
else {
cout << -1 << endl ;//如果存在重复的数值则不可能构成排列。
return 0 ;
}
}
//cout << Min << endl ;
int c = 1 - Min ;
bool f = false;
for(register int i=1;i<=n;i++) {
if(res[i] + c > n) {//如果大于n则不能构成 也是输出-1
cout << -1 << endl ;
return 0 ;
}
}
for(register int i=1;i<=n;i++) {
cout << res[i] + c << ' ' ;
}
return 0 ;
}
随机推荐
- Struts2的介绍
Struts2的介绍 制作人:全心全意 Struts引用的是MVC(Model-View-Controller,模型-视图-控制器)设计理念.目前,JavaWeb应用MVC设计理念的框架有很多,如St ...
- 第十四节:Web爬虫之Ajax数据爬取
有时候在爬取数据的时候我们需要手动向上滑一下,网页才加载一定量的数据,但是网页的url并没有发生变化,这时我们就要考虑使用ajax进行数据爬取了...
- BZOJ 4094 USACO 2013 Dec. Optimal Milking
线段树 每个节点保存4个值,both表示左右端点都取,neither表示左右端点都不取,left表示只取左端点,right表示只取右端点. 维护的特殊姿势: $cur$的$both=max(ls.l+ ...
- 【Codeforces 279C】Ladder
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 设pre[i]表示i往前一直递增能递增多远 设aft[i]表示i往后一直递增能递增多远 如果aft[l]+pre[r]>=(r-l+1) ...
- CodeForcesGym 100753E Change of Scenery
Change of Scenery Time Limit: 10000ms Memory Limit: 262144KB This problem will be judged on CodeForc ...
- noip模拟赛 三角形
[问题描述] 平面上有N条直线,用方程Aix + Biy +Ci =0表示.这些直线没有三线共点的.现在要你计算出用这些直线可以构造出多少三角形? 输入: 第1行:一个整数N(1 ≤ N≤ 30000 ...
- scrapy——中间件UserAgent代理
pip install fake-useragent 使用说明:from fake_useragent import UserAgent# 实例化一个UserAgent对象ua = UserAgent ...
- 由MTK平台 mtkfb 设备注册疑问引发的知识延伸--ARM Device Tree
问题: 在kernel-3.10\drivers\misc\mediatek\videox\mt6735\mtkfb.c里面int __init mtkfb_init(void) 有看到 platfo ...
- [codeVS1404] 字符串匹配
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度. ...
- codevs3730 无线网络发射选址
题目描述 Description 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129条东西向街道和129条南北向街道所形 ...