题意是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;
}