已 A,但有疑惑。
查看原帖
已 A,但有疑惑。
731650
_zuoqingyuan楼主2024/3/15 21:00

最开始的时候二分答案中的 check() 是这样写的

bool check(ll t){
    ll group=1,cnt=0,r=n;
    for(int i=n;i>=1;i--){
        ll now=ask(a[i]);
        if(cnt+now<=t)cnt+=now,add(a[i],1);
        else remove(i+1,r),cnt=0,r=i,group++,add(a[i],1);
    }
    remove(1,r);
    if(group<=k)return 1;
    else return 0;
}

但是 WA了,我把循环顺序从倒序该为顺序就 A 了。

bool check(ll t){
    ll group=1,cnt=0,r=n;
    for(int i=n;i>=1;i--){
        ll now=ask(a[i]);
        if(cnt+now<=t)cnt+=now,add(a[i],1);
        else remove(i+1,r),cnt=0,r=i,group++,add(a[i],1);
    }
    remove(1,r);
    if(group<=k)return 1;
    else return 0;
}

这是为什么,能否有人解释一下,或者提供一组卡掉我程序的数据也好。

2024/3/15 21:00
加载中...