B. Xor of 3 題解(思維+構造)


題目鏈接

題目思路

官方題解寫的很好

但基本想不到。。。還是寫個博客記錄下

代碼

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=4e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
int n;
int a[maxn];
vector<int> vec;
void solve(int l,int r){
    if(r-l==0) return ;
    for(int i=l;i+2<=r;i+=2){
        vec.push_back(i);
    }
    for(int i=r-4;i>=l;i-=2){
        vec.push_back(i);
    }
}
signed main(){
    int _;cin>>_;
    while(_--){
        vec.clear();
        cin>>n;
        int x=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            x^=a[i];
        }
        if(x==1){
            cout<<"NO\n";
            continue;
        }
        if(n%2==1){
            cout<<"YES\n";
            solve(1,n);
            cout<<vec.size()<<'\n';
            for(auto x:vec){
                cout<<x<<' ';
            }
            if(vec.size())
                cout<<'\n';
        }else{
            x=0;
            for(int i=1;i<=n;i++){
                x^=a[i];
                if(i%2==1&&x==0){
                    cout<<"YES\n";
                    solve(1,i);
                    solve(i+1,n);
                    cout<<vec.size()<<'\n';
                    for(auto x:vec){
                        cout<<x<<' ';
                    }
                    if(vec.size())
                        cout<<'\n';
                    break;
                }
                if(i==n){
                    cout<<"NO\n";
                }
            }
        }
    }
    return 0;
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM