lsmCC 发表于 2023-11-14 22:02:54

修改代码

#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();
    }

}
为什么没有输出呢

isdkz 发表于 2023-11-14 22:03:00

你的代码中存在一个错误。在 search 函数中,计算 mid 的方式不正确,应该是 long long mid=(l+r+1)/2; 而不是 long long mid=l+r+1>>2; 。将这一行修改为 long long mid=(l+r+1)/2; 即可解决问题。
页: [1]
查看完整版本: 修改代码