Educational Codeforces Round 102 (Rated for Div. 2) C. No More Inversions
戳上方进入题目哟~
题目大意
(这道题真的不好懂,对语文不及格的蒟蒻造成了巨大冲击)
你有一个长度为n的数组遵循以下规律:
1,2,3, … ,k-1, k, k-1, … , k-(n-k) 其中k <= n < 2k 。
首先题目给出一个定义: 我们把 i < j但a[i] > a[j]的情况称为倒置。
现在让你求出一个数组p,使得存在一数组 b[i] = p[a[i]],使b[i]倒置的数目与a[i]相同,且b[i]的字典序大于a[i]。
解析
拿到这个题首先就要看懂这个数组的规律是什么东西:
开始先递增至k然后再从k递减至 k-(n-k)。
那么既然b[i]的倒置与a[i]相同,也就是说直到b[i] = k-(n-k)都是相同的,作用在p上就是i = 2*k-n前,在这之前p[i]正序递增。
为了让b[i]的字典序大于a[i],在b[i] = k-(n-k)后只要让他和a[i]的顺序相反即可(a是先正后逆,b就先逆后正,由于大数在先故b的字典序一定大于a)
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 200;
int main(){
int t;
cin >> t;
for(int j = 0;j < t;j++){
int n,k;
cin >> n >> k;
for(int i = 1;i < 2*k-n;i++) //第一个循环正序输出
cout << i << " ";
for(int i = 2*k-n; i <= k; ++i) //需要将数组倒序输出的地方
cout << k-i+(2*k-n) << " ";
cout << endl;
}
return 0;
}
END