原题链接
题意
思路
可以交换距离 xxx 的元素,那么就看 xxx 能否覆盖住整个数组,
如果x?2<=nx * 2 <= nx?2<=n说明可以覆盖,否则不能覆盖。
不能覆盖的话就看未被覆盖部分是否符合要求,因为不能移动。
不覆盖的范围是[n?x+1,x][n - x + 1,\ x ][n?x+1, x].
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;int a[N];
int b[N];int main()
{
int t; scanf("%d", &t);while (t -- ){
int n, x; scanf("%d%d", &n, &x);for (int i = 1; i <= n; i ++ ) {
scanf("%d", &a[i]);b[i] = a[i];}if (x * 2 <= n) printf("YES\n");else{
sort(b + 1, b + 1 + n);bool f = 0; for (int i = n - x + 1; i <= x; i ++ ){
if (a[i] != b[i]){
f = 1;break;}}if (!f) printf("YES\n");else printf("NO\n");}}return 0;
}
总结
我不理解,为什么会超时。。。