9.16深信服笔试题3:最长连续1串子串数,运行时间44ms

#include<bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;

int main(){
    
    int n, maxlength = 0, left = 0, right = 0;
    vector<int> start; 
    string s;
    cin>>n>>s;
    
    while(right < n){
        while(right < n && s[right] == '0')right ++;
        if(right == n)break;
        left = right;
        while (right < n && s[right] == '1')right ++;

        int tmp = right-left;
        if(tmp == maxlength)start.push_back(left);
        else if(tmp > maxlength){
            maxlength = tmp;
            start.clear();
            start.push_back(left);
        }
    }
    if(start.empty()){cout<<0; return 0;}

    int size = start.size(), prev = -1;
    long long  ans = 0, sum = 0, squareSum = 0;

    for(int i = 0; i < size; i++){
        int tmp = start[i];
        start[i] = start[i] - prev;
        prev = tmp;
    }
    start.push_back(n + 1 - prev - maxlength);
    
    //巧妙计算
    for(auto &i : start){
        sum += i;
        squareSum = (squareSum + ((long long)i * i))%MOD;
    }
    ans = sum * sum - squareSum;
    ans = (ans < 0)? (ans + MOD)%MOD : ans%MOD;
    if(ans % 2)ans = (ans + MOD)/2;
    else ans /= 2;
    //非巧妙计算会超时,代码如下:
    /*
    for(int i = 1; i <= size; i++){
        for(int j = 0; j < size+1-i; j++){
            ans += start[j] * start[j+i];
            ans %= MOD;
        }
    }
    */
    cout<<ans;
    return 0;
}        
巧妙计算部分利用了等式:
#深信服笔试题#
全部评论
大佬可以来试试我们华勤技术,我主页有校招详情和内推码
点赞 回复 分享
发布于 2022-09-16 23:35 江苏

相关推荐

繁华的街道两旁,湿漉漉的下午,两个青涩的脸庞互相张望。宽大卫衣下娇小的她,向我奔来。不约而同的卫衣,斯文的半框眼镜掩饰着一个穷臭屌丝气息。这是我和我牛爱网第一死忠粉兼专属女嘉宾最初的见面。火速恋爱,但是没有所谓的快节奏,相识半年,还是一样的热恋。吃着肉夹馍坐过西安的小三轮洱海边自行车的气球胖吃着她最喜欢的酸酸水果和小乳扇在南山某店爷爷穿孙子衣服,摸肥猫就算我在忙也要抽出时间陪她去吃他喜欢的漂亮饭生活总是平凡,但平凡不平淡还记得见面第一件事儿:“我去上个厕所。”现在早上第一件事儿:“拉*”第一次上我车的她:“我可以坐副驾吗?”现在的她:“老子把jio翘到上面得得挡到你后视镜。”这小孩,虽然花了我...
Stan_蹒跚者:确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客企业服务