2 条题解

  • 6
    @ 2026-8-26 11:58:29

    让我们发扬人类智慧。

    根据数学直觉,答案所在区间不会太长。

    于是枚举长度为 [l,min(l+x,u)][l,\min(l+x,u)] 的区间便可以找到答案。

    令 x=5000,可以 500 ms 内轻松通过。\

    AC code

    #include<bits/stdc++.h>
    using namespace std;
    #define fi first
    #define se second 
    #define pb push_back
    #define int long long
    const int N = 2e5+10;
    long long a[N];
    long long sum[N];
    void solve()
    {
        return;
    }
    int u,v,n;
    int p,q;
    signed main()
    {
        cin>>n>>u>>v;
        p=0;q=1;
        for(int i=1;i<=n;i++) cin>>a[i],a[i+n]=a[i];
        for(int i=1;i<=2*n;i++) sum[i]=sum[i-1]+a[i];
        for(int i=((u+1)/2)*2;i<=min(u+5000,v);i+=2)
        {
            long long maxn=0;
            for(int j=1;j+i-1<=2*n;j++)
            {
                // cout<<j<<' '<<sum[j+i-1]<<' '<<sum[j-1]<<'\n';
                maxn=max(maxn,sum[j+i-1]-sum[j-1]);
            }
            if(maxn*q>p*i) p=maxn,q=i;
        }
        // cout<<p<<' '<<q<<'\n';
        int tmp=__gcd(p,q);
        p/=tmp;q/=tmp;
        cout<<p;
        if(q>1) cout<<'/'<<q;
        return 0;
    }
    

    信息

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