case8错误,求调
查看原帖
case8错误,求调
958476
Akooo楼主2024/5/13 11:12
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N =2e5+10;

int n,m;
string s;
int c[N];
int ling[N],yi[N];

signed main(){

    cin>>n;
    cin>>s;
    s=' '+s;
    for(int i=1;i<=n;i++){
        cin>>c[i];
    }
    for(int i=1;i<=n;i++){
        ling[i]+=ling[i-1];
        yi[i]+=yi[i-1];
        if(i%2==0){//奇数位
            if(s[i]=='1'){
                yi[i]+=+c[i];
            }
            else{
                ling[i]+=+c[i];
            }
        }
        else{
            if(s[i]=='1'){
                ling[i]+=+c[i];
            }
            else{
                yi[i]+=+c[i];
            }
        }
    }
//    for(int i=1;i<=n;i++){
//        cout<<i<<"---------"<<endl;
//        cout<<"1:"<<yi[i]<<endl;
//        cout<<"0:"<<ling[i]<<endl;
//    }
    int ans=2000000000000100;
    for(int i=1;i<n;i++){
        int ans1=0;
        int ans0=0;
        if(s[i]=='0') ans1+=c[i];
        else ans0+=c[i];
        if(s[i+1]=='0') ans1+=c[i+1];
        else ans0+=c[i];
        if(i!=1){
            if((i-1)%2==1){
                ans1+=ling[i-1];
                ans0+=yi[i-1];
            }
            else{
                ans1+=yi[i-1];
                ans0+=ling[i-1];
            }
        }
        if(i!=n-1){
            if((i+2)%2==1){
                ans1+=ling[n]-ling[i+1];
                ans0+=yi[n]-yi[i+1];
            }
            else{
                ans1+=yi[n]-yi[i+1];
                ans0+=ling[n]-ling[i+1];
            }
        }
        ans=min(ans,ans1);
        ans=min(ans,ans0);
    }

    cout<<ans<<endl;

    return 0;
}

2024/5/13 11:12
加载中...