|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <bits/stdc++.h>
- using namespace std;
- int n,m;
- const int N=1e6+10;
- int a[N];
- void putin()
- {
- cin>>n>>m;
- for(int i=1;i<=n;i++)
- {
- cin>>a[i];
- }
- }
- bool check(int k)
- {
- int sum=0;
- for(int i=1;i<=n;i++)
- {
- if(k>a[i])sum+=k-a[i];
- else sum+=0;
- }
- return sum;
- }
- void cut()
- {
- int l=1,r=1e9;
- while(l<=r)
- {
- int mid=l+r>>1;
- if(check(mid)>m)l=mid+1;//取多了,将H提高,保证是那个值
- else if(check(mid)<m)r=mid-1;
- else
- {
- cout<<mid;
- return ;
- }
-
- }
- cout<<r<<endl;
-
- }
- int main()
- {
- putin();
- cut();
- }
复制代码
- bool check(int k)
- {
- int sum=0;
- for(int i=1;i<=n;i++)
- {
- if(k>a[ i]) sum+=k-a[ i];
- else sum+=0;
- }
- return sum;
- }
复制代码
在这个函数中,虽然返回类型是bool,但实际上它返回的是一个整数值。在C++中,0被视为false,非零值被视为true。因此,当 return sum; 语句执行时,如果sum为0,则会返回false,否则返回true。这会导致程序输出0,因为0被视为false。解决方法是将返回类型改为int,并根据实际情况返回true或false。
|
|