题解:CF2175B XOR Array

· · 题解

CSP-J 2025 T3 的套路,前缀异或和。

定义 b_i=b_{i-1}\oplus a_i

f(l,r)=0,那么就意味着 b_r=b_{l-1}

f(l,r)\ne0,那么就意味着 b_r\ne b_{l-1}

然后这题是构造 a,我们显然可以通过 b 来构造 a

那我们随意构造一个两两互不相同的 b,然后令 b_r\gets b_{l-1} 就可以得到合法的 b

然后再从 b 推回去就能得到 a,做完了。

#include<bits/stdc++.h>
#define mod 998244353
#define int long long
using namespace std;
int a[400005];
bool check(int n){
    int ans=0;
    for(int l=1;l<=n;l++)
    for(int r=l;r<=n;r++){
        int sum=0;
        for(int i=l;i<=r;i++)sum^=a[i];
        if(sum==0)ans++;
    }
    return ans==1;
}
void solve(){
    int n,x,y;
    cin>>n>>x>>y;
    for(int i=1;i<=n;i++)a[i]=i;
    a[y]=a[x-1];
    for(int i=n;i;i--)a[i]^=a[i-1];
    for(int i=1;i<=n;i++)cout<<a[i]<<' ';
    cout<<'\n';
    // cout<<"! "<<check(n)<<'\n';
}
signed main(){
    int t=1;
    cin>>t;
    while(t--)solve();
    return 0;
}
//『算了吧、算了吧。太靠近人类肯定不会有好事。听好了,我这不是忠告,而是预言。以我的银瞳起誓,你去找他绝对会遭遇不幸。』

// 它并不是没听见这些威胁的话语。
// 但它没有退缩。何为幸福,何为不幸,届时再由自己做判断。因此它顽固地坚持着。