C. Polycarp Restores Permutation
2024-10-12 17:52:45
链接
[https://codeforces.com/contest/1141/problem/C]
题意
qi=pi+1−pi.给你qi让你恢复pi
每个pi都不一样
分析
就是数学吧
a1 +(a2-a1) +(a3-a1) +(a4-a1) +(a5-a1) +(a6-a1) +…+(an-a1)=a1+a2+....+an-(n-1)a1;
=n(n+1)/2-(n-1)*a1=a1+(a2-a1) +(a3-a1) +(a4-a1) +(a5-a1) +(a6-a1) +…+(an-a1)
(a2-a1) +(a3-a1) +(a4-a1) +(a5-a1) +(a6-a1) +…+(an-a1)可以用一个前缀和统计
a1=a1=( n × (n+1) / 2 -sum[n-1])/n;
在判断是否有重复的和超出范围的
看代码吧
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;
ll p[N],sum[N];
bool vis[N];
ll n;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
cout<<int('a')<<endl;
while(cin>>n){
sum[0]=0;
for(int i=1;i<n;i++)
{
cin>>p[i];
sum[i]=sum[i-1]+p[i];
}
for(int i=1;i<n;i++)
sum[i]+=sum[i-1];
ll a1=(n*(n+1)/2-sum[n-1])/n;
//cout<<a1<<endl;
if(a1<1||a1>n) cout<<-1<<endl;
else{
bool flag=0;
ll last=a1;
memset(vis,0,sizeof(vis));
vis[last]=1;
vector<ll> ve;
ve.push_back(last);
for(int i=2;i<=n;i++)
if(last+p[i-1]>=1&&last+p[i-1]<=n&&!vis[last+p[i-1]]){
last=last+p[i-1];
vis[last]=1;
ve.push_back(last);
}
else{
flag=1; break;
}
if(flag) cout<<-1;
else for(int i=0;i<n;i++) cout<<ve[i]<<' ';
cout<<endl;
}
}
return 0;
}
最新文章
- 主要由顶点容器构成的平面图形类(Shape)——(第一次作业Draw类定义升级)
- HTML 学习笔记(列表)
- ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor.error:34 - Developer Notification
- cocosbuilder中使用字体描边时,字符重叠,间距过小问题
- SSL/TLS/WTLS原理
- Nginx入门之两种handler函数的挂载方式
- Wix学习整理(5)——安装时填写注册表
- ubuntu下安装UltraEdit
- android企业级商城源码、360&#176;全景图VR源码、全民直播源码等
- 在C++98基础上学习C++11新特性
- RK3288 GPIO
- 当yum安装出现Error: Package: glibc-headers .....时
- Insert Into 语句的语法错误
- TensorFlow走过的坑之---数据读取和tf中batch的使用方法
- 20165314 2017-2018-2《Java程序设计》课程总结
- [POJ2287][Tyvj1048]田忌赛马 (贪心+DP)
- full gc频繁的分析及解决案例
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题【转】
- oauth2-server-php-docs 概念
- Happy Java:定义泛型参数的方法