CF1850E题解
先将 减去 ,那么得到的 就是空白部分的总面积。
接下来考虑怎么求空白部分的总面积

将每个图片抽象成上图,红色部分的面积就是空白部分的面积。

蓝色的线就表示空白部分的宽 ,由图可得 ( 表示第 张图的空白部分的面积)。
那么,空白部分的总面积为
其中 可以预处理得到。
显然, 具有单调性,考虑二分答案 ,套用上面的公式算即可。
#include<bits/stdc++.h>
using namespace std;
int t,n,s[200010];
long long c;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%lld",&n,&c);
long long o=0;
for(int i=1;i<=n;i++){
scanf("%d",&s[i]);
c-=1ll*s[i]*s[i];
o+=1ll*s[i];
}
long long l=1,r=c+1;
while(l<r-1){
long long mid=l+r>>1;
if(c/mid/4/n<mid){
r=mid;
continue;
}
long long h=c-1ll*mid*mid*4*n;
if(h/o/4<mid){
r=mid;
continue;
}
l=mid;
}
printf("%lld\n",l);
}
return 0;
}

浙公网安备 33010602011771号