牛客周赛 Round 49

牛客周赛 Round 49

A 牛客 NC275421 嘤嘤不想做计几喵 AC

  • 顺序结构。

    点击查看代码
    int main()
    {
        ll a,b;
        cin>>a>>b;
        cout<<a-b-b*10<<endl;
        return 0;
    }
    

B 牛客 NC275501 嘤嘤不想打怪兽喵 AC

  • 递归求解。

    点击查看代码
    ll ask(ll x)
    {
        return (x==1)?1:2*ask(x/2)+1;
    }
    int main()
    {
        ll h,i;
        cin>>h;
        cout<<ask(h)<<endl;
        return 0;
    }
    

C 牛客 NC275503 嘤嘤不想买东西喵 AC

  • aix 后等价于 luogu P1115 最大子段和

    点击查看代码
    ll a[100010];
    int main()
    {
        ll n,x,sum=0,ans=0,i;
        cin>>n>>x;
        for(i=1;i<=n;i++)
        {
            cin>>a[i];
            a[i]-=x;
            sum=max(a[i],sum+a[i]);
            ans=max(ans,sum);
        }
        cout<<ans<<endl;
        return 0;
    }
    

D 牛客 NC275631 嘤嘤不想求异或喵 AC

  • 把式子拆成前缀异或的形式,有 i=lri=(i=1ri)(i=1l1i) 。以下只讨论 i=1ri 的解法。

  • (2k)(2k+1)=1 ,把 i=1ri 拆成 1(i=2ri)=1{i=1r121(r1)mod2=0r(i=1r121)(r1)mod2=1 ,即 i=1ri={rrmod4=01rmod4=1r+1rmod4=20rmod4=3

  • 特判边界。

    点击查看代码
    ll ask(ll x)
    {
        if(x%4==0)
        {
            return x;
        }
        if(x%4==1)
        {
            return 1;
        }
        if(x%4==2)
        {
            return x+1;
        }
        if(x%4==3)
        {
            return 0;
        }
        return 114514;
    }
    int main()
    {
        ll t,l,r,i,j;
        cin>>t;
        for(i=1;i<=t;i++)
        {
            cin>>l>>r;
            cout<<(ask(r)^ask(l-1))<<endl;
        }
        return 0;
    }
    

E 牛客 NC275518 嘤嘤不想解方程喵 AC

  • 等价于求 a1b2x2+(b1b2+a2)x+(b2c1+c2)=0 的解的数量。

  • 大力分讨。

    • 非方程
      • 无解
      • 无数组解
    • 一元一次方程
      • 一组解
    • 二元一次方程
      • 两组解
      • 一组解
      • 无解
  • 懒得用高精。人生苦短,我用 Python 。

    点击查看代码
    t=int(input())
    for i in range(t):
        a1,b1,c1,a2,b2,c2=[int(x) for x in input().split()]
        a=a1*b2
        b=b1*b2+a2
        c=b2*c1+c2
        if a==0:
            if b==0:
                if c==0:
                    print("INF")
                else:
                    print(0)
            else:
                print(1)
        else:
            if b*b>4*a*c:
                print(2)
            if b*b==4*a*c:
                print(1)
            if b*b<4*a*c:
                print(0)
    

F 牛客 NC275523 嘤嘤不想找最小喵

  • 对于 i[1,n2k] ,有 i+2k[2k+1,n],i+k[k+1,n] ,三段一位位判断不如哈希起来后一起判断。

  • 选个好点的模数和进制。

    点击查看代码
    const ull base=133311111;
    ull s[500010],a[500010],jc[500010];
    void sx_hash(ull s[],ull a[],ull len)
    {
        for(ull i=0;i<=len;i++)
        {
            a[i]=(i==0)?0:a[i-1]*base+s[i];
        }
    }
    ull ask_hash(ull a[],ull l,ull r)
    {
        return a[r]-a[l-1]*jc[r-l+1];
    }
    int main()
    {
        ull n,i,k;
        cin>>n;
        for(i=0;i<=n;i++)
        {
            jc[i]=(i==0)?1:jc[i-1]*base;
        }
        for(i=1;i<=n;i++)
        {
            cin>>s[i];
        }
        sx_hash(s,a,n);
        for(k=1;k<=n;k++)
        {
            if(ask_hash(a,1,n-2*k)+ask_hash(a,2*k+1,n)==2*ask_hash(a,k+1,n-k))
            {
                cout<<k<<endl;
                break;
            }
        }
        return 0;
    }
    

总结

  • long long
  • E
    • 记得判断方程的存在性。
    • 速通 Python 要提上日程了。
  • F
    • 进制要大于值域。
posted @   hzoi_Shadow  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
扩大
缩小
点击右上角即可分享
微信分享提示