题意:
有一个长n(n为偶数)的序列a,已知a满足 a1≤a2≤⋯≤an,给出一个长度为n/2的序列b,定义bi=ai+an−i+1,输出任意一种符合题意的序列a。
题解:
1.先初始化a[1] = 0 , a[n] = b[n / 2],再一对一对地向中间添加序列a的元素。
2.成对添加的方法:举一个例子,假如添加a[2] 和 a[n - 1],那么保证a[2]>=a[1]且尽可能接近a[1],a[n - 1]<=a[n]且尽可能接近a[n],具体操作见代码。
#include<bits/stdc++.h>
using namespace std;
#define N 200005
long long a[N] , b[N] ;
int main()
{
int n ;
int i ;
int l , r ;
long long min1 ;
scanf("%d" , &n) ;
for(i = 1 ; i <= n / 2 ; i ++)
scanf("%lld" , &b[i]) ;
a[1] = 0 , a[n] = b[1] ;
for(i = 2 ; i <= n / 2 ; i ++)
{
l = i ;
r = n - i + 1 ;
a[l] = b[i] / 2 ;
a[r] = b[i] / 2 + b[i] % 2 ;
min1 = min(a[l] - a[l - 1] , a[r + 1] - a[r]) ;
a[l] -= min1 ;
a[r] += min1 ;
}
for(i = 1 ; i <= n ; i ++)
printf("%lld " , a[i]) ;
}