旋转阵列(Larray hackerrank)

旋转阵列(Larray hackerrank),c,arrays,algorithm,C,Arrays,Algorithm,我无法理解这个问题解决方案背后的逻辑。如果有人能向我解释它的工作原理,我将非常感激 解决方案: #include <bits/stdc++.h> using namespace std; const int N=1509; int n; int a[N]; void input(){ scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); } void sol(){

我无法理解这个问题解决方案背后的逻辑。如果有人能向我解释它的工作原理,我将非常感激

解决方案:

#include <bits/stdc++.h>
using namespace std;
const int N=1509;
int n;
int a[N];

void input(){
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        scanf("%d",&a[i]);
}

void sol(){
    int K=1;
    for (int i=1;i<=n;i++)
    for (int j=i+1;j<=n;j++)
        K^=(a[i]>a[j]);
    if (K) printf("YES\n");
    else printf("NO\n");
}

int main() {
    int test;
    scanf("%d",&test);
    while (test--){
        input();
        sol();
        }
    return 0;
}
#包括
使用名称空间std;
常数int N=1509;
int n;
int a[N];
无效输入(){
scanf(“%d”和“&n”);

对于(int i=1;i当你旋转一个块时,你将反转数改变+/-2或0(如果你不相信我,请在纸上计算出来)。因此,如果数组中的反转数是奇数,你将无法使用给定的操作对其进行排序。你将得到数组,除了2个元素外,其余元素几乎都已排序(1个反转)你不能用给定的操作来解决这个问题


代码所做的是通过每次看到反转时对其自身进行xoring来检查反转数是否为奇数。如果您将反转数加起来并检查
反转%2==0

您的绊脚石到底是什么?我无法得到在对每个排列进行xoring后,最后I的“k”值是多少What’答案是什么(是否可以按顺序排列)?请在你的帖子中添加你的确切问题。这里不是每个人都会阅读所有评论。