Array and Peaks
题面:
中文题意:
给你样例数T,再给你T个n和m。
n代表数组元素为序列(1~n),m代表数组中有m个山峰。
输出排列和元素符合条件的数组。
思路:
先正常1,2,3…这样排,然后有几个山峰,就从后往前制造几个。
很简单的,交换a[n-1]/a[n]。下一个在a[n-2]/a[n-3]交换。
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
int a[105];
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
int k;
scanf("%d", &k);
if((n%2==0&&(n/2-1<k))||(n%2!=0&&(n/2<k)))
{
printf("-1\n");
continue;
}
for (int i = 1; i <= n; i++)
a[i] = i;
int cnt = 0;
for (int i = 0;n-i-1>=1; i += 2) {
if (cnt == k) break;
else {
swap(a[n - i], a[n - 1 - i]);
cnt++;
}
}
for (int i = 1; i <= n; i++) {
if (i != n) printf("%d ", a[i]);
else printf("%d\n", a[i]);
}
}
}