CF#446 Gluttony(思維題)
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 indicesS = {x1, x2, ..., xk} (1 ≤ xi ≤ n, 0 < k
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
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.
Examples input2
1 2
output
2 1
input
4
1000 100 10 1
output
100 1 1000 10
Note
An array x is a permutation of y
Note that the empty subset and the subset containing all indices are not counted.
題意是a陣列,b陣列小於等於k的任意子集都不能相等,並不僅僅是前k項和,當時做這個題都理解錯了題意.
思路:因為陣列每一項都不相等,所以我們可以把第i位放置比a[i]大的第一個數,如果a[i]最大就放最小的那個.
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<cstring>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
const int ff = 0x3f3f3f3f;
int n,t;
int sq[52];
pair<int,int> a[52];
int main()
{
cin>>n;
for(int i = 0;i< n;i++)
{
cin>>a[i].first;
a[i].second = i;
}
sort(a,a+n);
for(int i = 0;i< n;i++)
sq[a[i].second] = i;
for(int i = 0;i< n;i++)
cout<<a[(sq[i]+1)%n].first<<' ';
return 0;
}