牛客练习赛80

比赛地址:https://ac.nowcoder.com/acm/contest/11170#question

A:
分以下 3 种情况:
1、如果存在长度为 1 的极长全 1 子串,那么将这个子串反转,变为 0 ,答案减少 1 ,例如 100110011
2、如果存在一个 0 ,在两个全 1 子串中间,则把这个 0 反转变成 1 ,答案减少 1 ,例如 11101100
3、以上情况都没有,用O(n)复杂度算出权重,即答案

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int ans=0,f=0;
    for(int i=0;i<s.size();)
    {
        int j,chang=0;
        for(j=i;j<s.size();j++)
        {
            if(s[j]=='0')    break;
            chang++;
        }
        if(chang==1)
        {
            f=1;
        }
        if(chang!=0)    ans++;
        i=j+1;
    }
    for(int i=1;i<s.size()-1;i++)
    {
        if(s[i]=='0'&&s[i-1]=='1'&&s[i+1]=='1')    f=1;
    }
    if(f==1)    cout<<ans-1<<endl;
    else    cout<<ans<<endl; 
    return 0;
}

B:
为了方便,以下题解及程序的数组下标从1开始(题目从0开始),用j表示a[j],k表示b[k],ansa表示a数组所有元素之和,ansb表示b数组所有元素之和。
我们分以下4种情况来分类讨论:
i = 1:j 和 k 必须 ≥ 2,则
          

i = 2:j 和 k 必须有一个 = 1,另外一个  ≥ 3,或者两个都是 1 ,则
          
i = 3:j 和 k 一个 = 1,一个 = 2,则
          
i ≥ 4:不可能有 j 和 k 满足条件,则
          
以上公式均没有加入取模运算,详情见代码
#include<bits/stdc++.h>
using namespace std;
const long long modd=998244353;
const int maxn=1e5+10;
long long a[maxn],b[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    long long ansa=0,ansb=0;
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        ansa+=a[i];
        ansa%=modd;
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&b[i]);
        ansb+=b[i];
        ansb%=modd;
    }
    long long ans1,ans2;

    ans1=ansa-a[1],ans2=ansb-b[1];
    if(ans1<0)    ans1+=modd;
    if(ans2<0)    ans2+=modd;
    cout<<(ans1*ans2)%modd<<" ";

    ans1=ansa-a[2],ans2=ansb-b[2];
    if(ans1<0)    ans1+=modd;
    if(ans2<0)    ans2+=modd;
    ans1-=a[1],ans2-=b[1];
    if(ans1<0)    ans1+=modd;
    if(ans2<0)    ans2+=modd;
    cout<<(((ans1*b[1])%modd+(ans2*a[1])%modd)%modd+(a[1]*b[1])%modd)%modd<<" ";

    cout<<((a[1]*b[2])%modd+(b[1]*a[2])%modd)%modd<<" ";

    for(int i=4;i<=n;i++)
    {
        printf("0 ");
    }
    printf("\n");
    return 0;
}
全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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