求解为什么P1873这代码能跑过...
  • 板块灌水区
  • 楼主四宫辉夜
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/5/5 19:24
  • 上次更新2023/10/28 02:06:20
查看原帖
求解为什么P1873这代码能跑过...
335816
四宫辉夜楼主2022/5/5 19:24

俗话说,OIer们最奇怪的两件事就是:

  1. 为什么这代码跑不过
  2. 为什么这代码过了
#include<cstdio>
#define max(a,b) ((a)>(b)?(a):(b))
#define LL long long
LL n,m,a[1000001],l,r;

inline LL calc(LL x)
{
    LL sum=0;
    for(register int i=0;i<n;++i)sum+=a[i]-x>0?a[i]-x:0;
    return sum;
}

int main()
{
    scanf("%lld%lld",&n,&m);
    for(register LL i=0;i<n;++i)scanf("%lld",a+i),r=max(r,a[i]);
    while(l<r)
    {
        LL mid=(l+r)>>1;
        if(calc(mid)>=m)l=mid+1;
        else r=mid;
    }
    printf("%lld\n",l-1);
}

我自己写的二分,但是不知道为什么left的值总是会比正解大1,写了这个-1之后就AC了...自己都想不明白

2022/5/5 19:24
加载中...