题解:P14788 [NERC 2025] Greta' s Game
NegetiveEdgeWeight · · 题解
这里给出一个 dp 做法。
首先定义
显然是要二分轮数
定义
由于
为了处理环我们直接将这个序列复制一遍就好了,还顺便省去了奇偶性讨论的麻烦。
初始区间就是
由于每轮最多产生
:::success[Code]
#include<bits/stdc++.h>
#define int long long
#define For(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
constexpr int N=5e5+5,MOD=998244353;
int t,n,a[N],aaa;
bool check(int k){
int l=0,r=k;
For(i,1,2*n){
int nl=max(0ll,a[(i-1)%n+1]-r),nr=min(k,a[(i-1)%n+1]-l);
if(nl>nr)
return 0;
l=nl,r=nr;
}
return 1;
}
void solve(){
cin>>n;
int sum=0,mx=0;
For(i,1,n){
cin>>a[i];
sum+=a[i];
mx=max(mx,a[i]);
}
int l=(sum/2+n-2)/(n-1),r=mx,ans=mx;
while(l<=r){
int mid=l+r>>1;
if(check(mid)){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<ans<<'\n';
}
signed main(){
cin>>t;
while(t--)
solve();
return 0;
}
:::