社区讨论

60pts 求调,已知bug,悬2关

P14954520参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mjy6n4ha
此快照首次捕获于
2026/01/03 18:51
2 个月前
此快照最后确认于
2026/01/03 18:59
2 个月前
查看原帖
代码:
CPP
using namespace std;
#define int long long
int T;
int n,a,b,c;
string s;
signed main(){
    cin>>T;
    while(T--){
        cin>>n>>a>>b>>c>>s;
        s=" "+s;
        int ans=0;
        while(1){
            int k=s.find("520");
            if(k==-1)break;
            else s[k]='1',s[k+1]='1',s[k+2]='1',ans++;
        }
        while(a!=0){
            int k=s.find("20");
            if(k==-1)break;
            else s[k]='1',s[k+1]='1',ans++,a--;
        }
        while(b!=0){
            int k=s.find("50");
            if(k==-1)break;
            else s[k]='1',s[k+1]='1',ans++,b--;
        }
        while(c!=0){
            int k=s.find("52");
            if(k==-1)break;
            else s[k]='1',s[k+1]='1',ans++,c--;
        }
        while(a!=0&&b!=0){
            int k=s.find("0");
            if(k==-1)break;
            else s[k]='1',ans++,a--,b--;
        }
        while(a!=0&&c!=0){
            int k=s.find("2");
            if(k==-1)break;
            else s[k]='1',ans++,a--,c--;
        }
        while(c!=0&&b!=0){
            int k=s.find("5");
            if(k==-1)break;
            else s[k]='1',ans++,c--,b--;
        }
        ans+=min({a,b,c});
        cout<<ans<<"\n";
    }
    return 0;
}

问题:比如说一个 52 子串,可以将其拆开成为 5 和 2 使用。

回复

2 条回复,欢迎继续交流。

正在加载回复...