Untitled

 avatar
unknown
plain_text
a year ago
1.9 kB
40
Indexable
#pragma GCC optimize("O2,no-stack-protector,unroll-loops")
#define ll long long
#define pb push_back
#define ipar(arr, n) vector<ll> arr(n); for(int i=0;i<n;i++) cin>>arr[i];
#include <cmath>
#include <bits/stdc++.h>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(s) s.begin(),s.end()

using namespace std;

ll move(ll n,ll i, ll j,vector<vector<ll>>&grid,string path,ll &ocount,string &res,ll &mincount){
    if(i>=2 || j>=n) return INT_MAX;
    path+=to_string(grid[i][j]);
    if(i==1 && j==n-1) {
        if(ocount<mincount) {
            res=path;
            mincount=ocount;
        }
        else if(ocount==mincount && res!=""){
            if(path<res) res=path;
        }
        return ocount;
    }
    ll r=INT_MAX, d=INT_MAX;

    if(grid[i][j]==1) ocount++;
     d=move(n,i+1,j,grid,path,ocount,res,mincount);
     r=move(n,i,j+1,grid,path,ocount,res,mincount);
      if(grid[i][j]==1) ocount--;
    return min(r,d);
}

void allp(ll n,ll i, ll j,vector<vector<ll>>&grid,string path,ll &ocount, ll &nop,string &res2){
    if(i>=2 || j>=n) return;

    path+=to_string(grid[i][j]);
    if(i==1 && j==n-1) {
        if(path==res2) nop++;


    }

    allp(n,i+1,j,grid,path,ocount,nop,res2);
    allp(n,i,j+1,grid,path,ocount,nop,res2);
}


void in(){
    ll n;cin>>n;
    string r1,r2;
    cin>>r1>>r2;
    vector<vector<ll>>grid(2,vector<ll>(n)); //0 indexed
    for (ll i=0;i<n;i++){
        grid[0][i]=r1[i]-'0';
        grid[1][i]=r2[i]-'0';
    }
    string res="",path="";
    ll ocount=grid[0][0]==1?1:0;
    ll mincount=INT_MAX;
    ll nasc=move(n,0,0,grid,path,ocount,res,mincount);
    ll nop=0;
    string res2=res;
    allp(n,0,0,grid,"",ocount,nop,res2);

    cout<<res<<"\n";
     cout<<nop<<"\n";
}





signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    ll t;
	cin>>t;
	while(t--) in();
}
Editor is loading...
Leave a Comment