诚心诚意的签到题。不过做的时候有点启发,也就是(a-b)%2的结果,可以是-1,0,+1。
题意:给一个数组,以及指定其中一些位置是可以进行邻位交换的,可以交换任意多次。求是否能把数组变回有序。
题解:数据量太小,甚至可以检查每个可交换的位置是否需要交换。但是更明显的是一段连续的可邻位交换的位置可以直接sort。注意sort传入的下标的格式。
int a[1005];
int p[1005];
void test_case() {
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for(int i = 1; i <= m; ++i)
scanf("%d", &p[i]);
sort(p + 1, p + 1 + m);
for(int l = 1, r = 1; l <= m; l = r + 1, r = l) {
while(r + 1 <= m && p[r + 1] == p[r] + 1)
++r;
sort(a + p[l], a + p[r] + 1 + 1);
}
for(int i = 2; i <= n; ++i) {
if(a[i] < a[i - 1]) {
puts("NO");
return;
}
}
puts("YES");
return;
}
Codeforces Round #624 (Div. 3)
原文:https://www.cnblogs.com/KisekiPurin2019/p/12423668.html