样例过了,全WA求帮助

img

img

#include<iostream>
using namespace std;
int T,n,a[200010],b[200010];
bool f(int x){
    for(int i=3;i<=n;i++){
        if(a[i]<x){
            return false;
        }
        int d=min(b[i],a[i]-x)/3;
        a[i]-=3*d;
        a[i-1]+=d;
        a[i-2]+=2*d;
        if(a[i]<x){
            return false;
        }
    }
    return true;
}
int main(){
    cin>>T;
    while(T--){
        cin>>n;
        int maxx=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            b[i]=a[i];
            maxx=max(maxx,a[i]);
        }
        int l=0,r=maxx*2,mid;
        while(l<r){
            mid=(l+r+1)/2;
            if(f(mid)){
                l=mid;
            }else{
                r=mid-1;
            }
        }
        cout<<l<<endl;
    }
    return 0;
}


你可以大概讲一下你的想法吗

  • 这篇博客: 202009-4 星际旅行中的 第一部分:为了WA冲冲冲 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. A或B为钝角则AB在黑洞外
    2. 不满足条件1的情况下O到AB距离H大于r则AB在黑洞外
    3. AB连线经过黑洞则计算A到切点E(AE为黑洞切线,FB同理)、劣弧、F到切点B的和,不需要分类讨论A、B是否在黑洞上