QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#311363#3286. Black or WhiteNYCU_CartesianTree#WA 14ms19164kbC++202.0kb2024-01-22 11:23:462024-01-22 11:23:48

Judging History

This is the latest submission verdict.

  • [2024-01-22 11:23:48]
  • Judged
  • Verdict: WA
  • Time: 14ms
  • Memory: 19164kb
  • [2024-01-22 11:23:46]
  • Submitted

answer

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

#define int long long
#define F first 
#define S second 
#define pb push_back

int bitw[500005],bitb[500005];
int pwb[500005],pbw[500005],dp[500005];
int n,k;

void updw(int now,int val){
    while(now<=n) bitw[now]=min(val, bitw[now]),now+=now&-now;
}
int valw(int now){
    int ans=1e18;
    while(now>=1) ans = min(ans, bitw[now]), now-=now&-now;
    return ans;
}

void updb(int now,int val){
    while(now<=n) bitb[now]=min(val, bitb[now]),now+=now&-now;
}
int valb(int now){
    int ans=1e18;
    while(now>=1) ans = min(ans, bitb[now]), now-=now&-now;
    return ans;
}

void solve(){

    cin>>n>>k;

    string t1,t2;
    cin>>t1>>t2;
    for(int i=1;i<=n;i++) bitb[i]=bitw[i]=1e18;
    for(int i=0;i<t2.size()-1;i++){
        if(t2[i]!=t2[i+1]){
            if(t2[i]=='W') pwb[i+1]=1;
            else pbw[i+1]=1;
        }
        pwb[i+1]+=pwb[i], pbw[i+1]+=pbw[i];
        // cout<<pbw[i]<<" "<<pwb[i]<<"\n";
    }

    for(int i=0;i<t2.size();i++){
        int pp=i-k;
        if(pp<0) pp=0;
        pp=n-pp;
        int v;
        if(t2[i]=='W'){
            if(i<k)
            dp[i]=pwb[i]+1+(t2[0]=='B');
            else dp[i]=1e18;
            // cout<<dp[i]<<" "<<pwb[i]<<" "<<i<<"\n";
            v=valw(pp);
            dp[i]=min(dp[i],v+pwb[i]+1);
        }
        else{
            if(i<k)
            dp[i]=pbw[i]+1+(t2[0]=='W');
            else dp[i]=1e18;
            v=valb(pp);
            dp[i]=min(dp[i],v+pbw[i]+1);
        }
        // cout<<v<<" "<<pwb[i]<<" "<<pbw[i]<<"\n";
        if(t2[i]==t1[i]){ 
            if(i)
            dp[i]=min(dp[i],dp[i-1]);
            else dp[i]=0;
        }
        if(i!=t2.size()-1){
            updw(n-i,dp[i]-pwb[i]);
            updb(n-i,dp[i]-pbw[i]);
        }
        // cout<<dp[i]<<" "<<dp[i]-pwb[i]<<"\n";
    }
    cout<<dp[n-1]<<"\n";

}

signed main(){
    ios::sync_with_stdio(0);cin.tie(0);
    solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 14ms
memory: 19164kb

input:

274694 5174
BBWWWWWBWBBBWBWBWBWBBBBWWBBBBBWWBWWBWWBBWBWWBBBWWWWWBWBBBBWWBBBWWBWWBBWBBWWBBWWBWWBBWWWWBWBBWBBBWBWBWBBBBWBWWWBWWWBBWBBWWWWBWWWWBBBWBWWBWBBBWBBWWWWBBWBBBWBWBBBBWBBBBBWBBWWBWBBBBWBWWWWWBWBBBBWWWWBBWWWBWBWBWWWBWWBBBBWBBWBWBBWWWWBBBWBBBWBWWBWWBBBWWWWBBWWWBBBWWBWWWBBWBBBWBBBBWBWWBWBWBBBBBBWW...

output:

60858

result:

wrong answer 1st lines differ - expected: '63250', found: '60858'