修改代码
#include <bits/stdc++.h>using namespace std;
const int N=2e5+10;
int a;
int n;
long long c;
void putin()
{
cin>>n>>c;
for(int i=0;i<n;i++)
{
cin>>a;
}
}
bool check(int k)
{
long long sum=0;
for(int i=0;i<n;i++)
{
sum+=pow((a+2*k),2);
}
return sum>=c;
}
void search()
{
long long l=1,r=ceil(sqrt(c/(n*4)));
while (l<r)
{
long long mid=l+r+1>>2;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<r<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
putin();
search();
}
}
为什么没有输出呢 你的代码中存在一个错误。在 search 函数中,计算 mid 的方式不正确,应该是 long long mid=(l+r+1)/2; 而不是 long long mid=l+r+1>>2; 。将这一行修改为 long long mid=(l+r+1)/2; 即可解决问题。
页:
[1]