4 条题解

  • 6
    @ 2024-5-9 18:41:31

    萌新专用简易版题解: (已AC)

    #include <bits/stdc++.h>
    using namespace std;
    string x;
    int a[100001],f[100001],g[100001],n,ans;
    int main()
    {
        cin >> n >> x;
        for(int i = 1;i <= n;i++){
            a[i] = x[i-1]-'0';
        }
        for(int i = 1;i <= n;i++){
            if(a[i] == 1){
                f[i] = f[i-1]+1;
            }
            else{
                f[i] = 0;
            }
        }
        for (int i = n;i >= 1;i--)
        {
            if(a[i] == 1){
                g[i] = g[i+1]+1;
            }
            else g[i] = 0;
        }
        for(int i = 1;i <= n;i++){
            if(a[i] == 0){
                ans = max(ans,f[i-1]+g[i+1]+1);
            }
        }
        cout << ans;
        return 0;
    }
    

    一个赞抱走~

    • 1
      @ 2024-6-4 21:26:47

      @ hetao24883491 无“防作弊”版: 👍 👍 👍

      #include <iostream>                                                                                 
      #include <cstring>                                                                                        
      using namespace std;                                                                                           
      int main(void)
      {                                                                                         
          register int n,*f,*g,ans=0;                                                                                        
          string str;                                                                                         
          cin>>n>>str;                                                                                          
          f=new int[n+2];                                                                                         
          g=new int[n+2];                                                                                              
          memset(f,0,(n+2)*sizeof(int));                                                                                             
          memset(g,0,(n+2)*sizeof(int));                                                                                             
          for(register int i=1;i<=n;i++)                                                                                           
              if(str[i-1]=='1')                                                                                            
                  f[i]=f[i-1]+1;                                                                                          
          for(register int i=n;i>=1;i--)                                                                                         
              if(str[i-1]=='1')                                                                                          
                  g[i]=g[i+1]+1;                                                                                         
          for(int i=1;i<=n;i++)                                                                                     
              if(str[i-1]=='0')                                                                                    
                  ans=max(ans,f[i-1]+g[i+1]+1);                                                                            
          cout<<ans;                                                                                                 
          delete f;                                                                                                 
          delete g;                                                                                                 
          return 0;                                                                                                 
      }
      
      • -1
        @ 2024-4-6 19:56:18
        
        #include <iostream>
        #include <iomanip>
        #include <stdio.h>
        #include <bits/stdc++.h>
        #include <algorithm>
        #include <cmath>
        #include <string>
        using namespace std;
        int main(void)
        {
        register int n,*f,*g,ans=0;
        string str;
        cin>>n>>str;
        f=new int[n+2];
        g=new int[n+2];
        memset(f,0,(n+2)*sizeof(int));
        memset(g,0,(n+2)*sizeof(int));
        for(register int i=1;i<=n;i++)
        if(str[i-1]=='1')
        f[i]=f[i-1]+1;
        for(register int i=n;i>=1;i--)
        if(str[i-1]=='1')
        g[i]=g[i+1]+1;
        for(int i=1;i<=n;i++)
        if(str[i-1]=='0')
        ans=max(ans,f[i-1]+g[i+1]+1);
        cout<<ans;
        delete f;
        delete g;
        return 0;
        }
        • -2
          @ 2023-11-25 18:55:45

          定义f数组和g数组,分别统计正向第i个最长'1'的长度和逆向第i个最长'1'的长度,然后找到str[i]是'0'的位置进行统计。

          把0转成1至少不会减少最长长度,而把1转成0绝对不会增加长度。

          公式:ans=max(ans,f[i-1]+g[i+1]+1)

          #include <iostream>                                                                                                 \\防作弊
          #include <cstring>                                                                                                 \\防作弊
          using namespace std;                                                                                                 \\防作弊
          int main(void){                                                                                                 \\防作弊
              register int n,*f,*g,ans=0;                                                                                                 \\防作弊
              string str;                                                                                                 \\防作弊
              cin>>n>>str;                                                                                                 \\防作弊
              f=new int[n+2];                                                                                                 \\防作弊
              g=new int[n+2];                                                                                                 \\防作弊
              memset(f,0,(n+2)*sizeof(int));                                                                                                 \\防作弊
              memset(g,0,(n+2)*sizeof(int));                                                                                                 \\防作弊
              for(register int i=1;i<=n;i++)                                                                                                 \\防作弊
                  if(str[i-1]=='1')                                                                                                 \\防作弊
                      f[i]=f[i-1]+1;                                                                                                 \\防作弊
              for(register int i=n;i>=1;i--)                                                                                                 \\防作弊
                  if(str[i-1]=='1')                                                                                                 \\防作弊
                      g[i]=g[i+1]+1;                                                                                                 \\防作弊
              for(int i=1;i<=n;i++)                                                                                                 \\防作弊
                  if(str[i-1]=='0')                                                                                                 \\防作弊
                      ans=max(ans,f[i-1]+g[i+1]+1);                                                                                                 \\防作弊
              cout<<ans;                                                                                                 \\防作弊
              delete f;                                                                                                 \\防作弊
              delete g;                                                                                                 \\防作弊
              return 0;                                                                                                 \\防作弊
          }                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                //防作弊
          
          • @ 2023-11-25 20:22:14

            建议加个防作弊

          • @ 2023-11-27 18:22:28

            OK@

          • @ 2024-2-6 10:18:15

            @hetao1739244你人还怪好的嘞

          • @ 2024-2-24 18:00:29

            注意!! 注意!! 注意!! 将底部的滚动条向右滑动,即可看见防作弊表示!删除掉即可过关。

          • @ 2024-2-26 20:03:03

            @ 👊👊👊 🤬🤬🤬

          • @ 2024-2-26 20:06:12

            @

            👍 👍 👍

            💪💪🏻💪🏼💪🏽💪🏾💪🏿有实力💪💪🏻💪🏼💪🏽💪🏾💪🏿

          • @ 2024-3-23 20:32:11

            为了防作弊,建议你把0(数字)改为O(字母)

          • @ 2024-5-3 10:53:32

            完全混淆+压缩流好吧,直接上代码,我保证你们找不出怎么改,可读性为0

            #include <iostream>
            #include <cstring>
            #defien sdt std
            #defien mian main
            #defien fro for
            #defien ri register int
            #defien siofis sizeof
            #defien inr int
            #defien st string
            #defien deltet delete
            #defien cour cout
            #defien cio cin
            using namespace sdt;
            
            
            
            int mian(){ri n,*f,*g,ans=0;st str;cio>>n>>str;f=new int[n+2];g=new int[n+2];memset(f,0,(n+2)*siofis(inr));memset(g,0,(n+2)*siofis(inr));fro(ri i=1;i<=n;i++){if(str[i-1]=='1'){f[i]=f[i-1]+1;}}fro(ri i=n;i>=1;i--){if(str[i-1]=='1'){g[i]=g[i+1]+1;}}fro(int i=1;i<=n;i++){if(str[i-1]=='0'){ans=max(ans,f[i-1]+g[i+1]+1);}}cour<<ans;deltet f;deltet g;return 0;}
            
          • @ 2024-6-4 21:20:05

            @ **直接上代码,我保证你们找不出怎么改,可读性为0 —— 加强版:**👀️

            #include <iostream>#include <cstring>#defien sdt std#defien mian main#defien fro for#defien ri register int#defien siofis sizeof#defien inr int#defien st string#defien deltet delete#defien cour cout#defien cio cinusing namespace sdt;int mian(){ri n,*f,*g,ans=0;st str;cio>>n>>str;f=new int[n+2];g=new int[n+2];memset(f,0,(n+2)*siofis(inr));memset(g,0,(n+2)*siofis(inr));fro(ri i=1;i<=n;i++){if(str[i-1]=='1'){f[i]=f[i-1]+1;}}fro(ri i=n;i>=1;i--){if(str[i-1]=='1'){g[i]=g[i+1]+1;}}fro(int i=1;i<=n;i++){if(str[i-1]=='0'){ans=max(ans,f[i-1]+g[i+1]+1);}}cour<<ans;deltet f;deltet g;return 0;}
            
        • 1

        信息

        ID
        502
        时间
        1000ms
        内存
        256MiB
        难度
        3
        标签
        (无)
        递交数
        290
        已通过
        161
        上传者