题解

T1 购物

https://ac.nowcoder.com/acm/contest/7612/A

B 题
可以像区间dp断环成链一样,把字符串倍长。

假设序列倍长后长度是

那么对于每个 ,找到区间 的最大连续 1 的长度。

这里可以直接找出倍长后最长的连续 1 的长度,然后对 取个min即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
inline int read(){
     int x=0,f=0,ch=getchar();
    while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
    while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
    return f?-x:x;
}
const int MAX=2e5+5;
string s;
int ans,pre[MAX],len;
signed main(){
    cin>>s;len=s.length();
    s=s+s;
    for( int i=1;i<=s.length();++i)pre[i]=pre[i-1]+(s[i-1]=='1');
    for( int i=1,l=1;i<=s.length();++i){
        l=i;
        while(pre[i]-pre[l-1]==i-l+1)++i;
        ans=max(ans,i-l);
    }
    printf("%d\n",min(ans,len));
    return 0;
}
全部评论

相关推荐

最近经历我的处女面,还是一家大厂,笑自己不自量力,面试官态度特好,问的问题也很专业。好多问题结结巴巴说不出来,还以为自己多厉害呢。跑过去耽误人家时间……😅简历上的写的最好还是实打实,不然一问三不知。
不要卷我了:我的第一次面大厂,前面聊的好好的,直到说让我写道sql,题很简单,但是我完全没准备光刷算法题了,group by后面多写了个字段,我说我写好了面试官笑了一下,后面说要去面下一个同学了
26届校招投递进展
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务