天天看點

D. Equal Binary Subsequences(構造)

D. Equal Binary Subsequences(構造)

顯然0、1的個數都為偶數,因為要分成兩個相等子序列。

考慮連續兩兩一組,存在這樣一種構造方式,就是通過題面給定操作讓每組元素都相等即可構造成功子序列

我們找出所有的這樣的組,然後分别選擇每組的

假設不同對的個數為x個,那麼相同的對數為n-x個,設相同的對數中1為y個。

那麼1的個數: 必須偶數,是以為偶數。

這樣我們操作(0,1,0,1) 最後就都會變換成相同的組。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
void solve(){
    ll n; cin>>n;
    string s; cin>>s;
    ll freq=0;
    vector<ll> ans;
    ll need=0;
    for(ll i=0;i<2*n;i+=2){
        if(s[i]!=s[i+1]){
            freq++;
            ans.push_back(i+1);
            if(s[i]-'0'!=need){
                ans.back()++;
            }
            need^=1;
        }
    }
    if(freq&1){
        cout<<"-1\n";
        return;
    }
    cout<<ans.size()<<" ";
    for(auto it:ans){
        cout<<it<<" ";
    }
    cout<<"\n";
    for(ll i=1;i<=2*n;i+=2){
        cout<<i<<" \n"[i+1==2*n];
    }
}
int main()                                                                                
{  
    ios_base::sync_with_stdio(false);                         
    cin.tie(NULL);  
    ll t; cin>>t;
    while(t--){
        solve();
    }
}      

繼續閱讀