cf1278C——dp

先预处理后一段的信息,然后前半段从前往后遍历一次,更新答案即可

#include<bits/stdc++.h>
using namespace std;
#define N 200005

int n,a[N];
map<int,int>mp;

int main(){
    int t;cin>>t;
    while(t--){
        cin>>n;
        mp.clear();
        for(int i=1;i<=2*n;i++)cin>>a[i];
        int now=0;mp[0]=2*n+1;
        for(int i=2*n;i>=n+1;i--){
            if(a[i]==1)now++;
            else now--;
            mp[now]=i;
        }
        
        int ans=0;
        if(mp[0]!=0)
            ans=2*n-mp[0]+1;
        now=0;
        for(int i=1;i<=n;i++){
            if(a[i]==1)now++;
            else now--;
            if(mp[-now]!=0)
                ans=max(ans,i+2*n-mp[-now]+1);
        }
        
        cout<<2*n-ans<<'\n';
    }
} 

posted on 2019-12-27 19:40  zsben  阅读(154)  评论(0编辑  收藏  举报

导航