Gluttony(codeforce-891B)

来源:互联网 发布:windows平板电脑 编辑:程序博客网 时间:2024/05/22 20:53
D. Gluttony
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

You are given an array a with n distinct integers. Construct an array b by permuting a such that for every non-empty subset of indices S = {x1, x2, ..., xk} (1 ≤ xi ≤ n0 < k < n) the sums of elements on that positions in a and b are different, i. e.

Input

The first line contains one integer n (1 ≤ n ≤ 22) — the size of the array.

The second line contains n space-separated distinct integers a1, a2, ..., an (0 ≤ ai ≤ 109) — the elements of the array.

Output

If there is no such array b, print -1.

Otherwise in the only line print n space-separated integers b1, b2, ..., bn. Note that b must be a permutation of a.

If there are multiple answers, print any of them.


题意理解:给你一个a数组,让你构造一个b数组,使得b数组的任意连续k项加起来,都和a数组不一样。

解题思路: 我们让给a数组排个序,使b数组的元素对应位,为第一个比a对应位小的元素,如果是最小值,那么就用最大值替换,这样就能保证完全的不同。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;;int a[50],p[50],b[50];bool cmp(int x,int y){return a[x]<a[y];}int main(){    int n;scanf("%d",&n);for (int i=0;i<n;i++){scanf("%d",&a[i]);p[i]=i;}sort(p,p+n,cmp);for (int i=0;i<n-1;i++){b[p[i+1]]=a[p[i]];}b[p[0]]=a[p[n-1]];for (int i=0;i<n;i++){printf("%d ",b[i]);}    return 0;}