原题链接
题意
思路
可以交换距离 x x x 的元素,那么就看 x x x 能否覆盖住整个数组,
如果
x
∗
2
<
=
n
x * 2 <= n
x∗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;
}
总结
我不理解,为什么会超时。。。