求 CF Div.2 C 的 Hack
  • 板块学术版
  • 楼主lsj2009Isj2OO9
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/8/6 02:09
  • 上次更新2023/11/3 05:39:00
查看原帖
求 CF Div.2 C 的 Hack
468657
lsj2009Isj2OO9楼主2023/8/6 02:09

rt.

赛时过了,赛后 FST,WA 掉的点太大了,下不下来。

代码见下。

#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define INFLL 0x3f3f3f3f3f3f3f3f
#define rep(k,l,r) for(int k=l;k<=r;++k)
#define per(k,r,l) for(int k=r;k>=l;--k)
#define cl(f,x) memset(f,x,sizeof(f))
using namespace std;
const int N=1e3+5;
int a[N],sum[N],T,n,k;
signed main() {
    scanf("%lld",&T);
    while(T--) {
        scanf("%lld%lld",&n,&k);
        int p=0,res=0;
        rep(i,1,n)
            scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i],res=max(res,a[i]);
        rep(i,1,n-1) {
            rep(j,1,i) {
                int l=a[i],r=a[i+1]+1,ans=-1;
                while(l<=r) {
                    int mid=(l+r)>>1;
                    if((2*mid+i-j)*(i-j+1)/2-(sum[i]-sum[j-1])<=k)
                        ans=mid,l=mid+1;
                    else
                        r=mid-1;
                }
                if(ans!=-1)
                    res=max(res,ans+i-j);
            }
        }
        printf("%lld\n",res);
    }
    return 0;
}
2023/8/6 02:09
加载中...