Dashboard - Codeforces Round 897 (Div. 2) - Codeforces
A - green_gold_dog, array and permutation
题意
有一个长度为n的数组a,请你找出一个长度为n的排列b。 根据数组a和b来构造出数组c。
$c[i] = a[i] - b[i]$ ,尽可能地使c数组中的 互不相同的数的数量。
思路
好妙的思路! 让最小的$a[i]$ 减去n,次小的减去$n-1$ ,这样每个$c[i]$ 都不一样。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<iostream> #include<set> #include<vector> #include<algorithm> using namespace std; const int N = 4e4 + 5; pair<int,int> a[N]; pair<int,int> b[N]; int main(){ int t; cin>>t; while (t--){ int n; cin>>n; int num; for(int i = 1;i<=n;i++){ cin>>num; a[i].first = num; a[i].second = i; } sort(a+1,a+1+n); for(int i = 1;i<=n;i++){ b[i].first = a[i].second; b[i].second = n+1-i; } sort(b+1,b+1+n); for(int i = 1;i<=n;i++){ cout<<b[i].second <<" "; } puts(""); }
return 0; }
|