C题为啥只过了88.2%?求讲解

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,sum=0,haha=0;
    bool hand=true;
    cin>>n;
    string s;
    cin>>s;
    for(int i=0;i<n;i++){
        if(s[i]=='1')sum++;
        else haha++;
        if(haha>sum&&hand==true){
            hand=false;
            haha--;
            sum++;
        }else if(haha>sum&&hand==false){
            cout<<0;
            return 0;
        }
    }
    if(hand==true)cout<<n;
    else cout<<haha;
}

全部评论
你要记录第一个必须举手的地方,当前位置以及往前的0的位置都能举,以后的不能举,用一个cnt记录 int main(){     int n,sum=0,haha=0;     bool hand=true;     cin>>n;     string s;     cin>>s;     int cnt = 1;     for(int i=0;i<n;i++){         if(s[i]=='1&(30767)#39;)sum++;         else haha++;         if(haha>sum&&hand==true){             hand=false;             cnt = haha;             haha--;             sum++;         }else if(haha>sum&&hand==false){             cout<<0;             return 0;         }     }     if(hand==true)cout<<n;     else cout<<cnt; } 如果可行输出cnt 这样就能过了
1 回复 分享
发布于 02-09 21:23 广西
和我犯了一样的错误,考虑这个样例 10 1000101010 正确答案是2,你的答案是5,原因在于haha在第一次有负场后就应该停止更新了,你的haha更新了错误答案
1 回复 分享
发布于 02-09 21:28 江苏

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务