给定一个数组,我们必须取一个数组的平均值,然后对该平均值进行处理,该值应该小于问题的k. Link:- https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/minimum-additions-0142ac80/。
我的代码:-
#include "bits/stdc++.h"
using namespace std;
int main() {
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
int arr[n];
int s = 0;
for(int i=0;i<n;i++){
cin>>arr[i];
s += arr[i];
}
int ans;
if(floor(s/n)<=k){
cout<<0<<endl;
}
else{
cout<<floor( s/(k+1) - n + 1 )<<endl;
}
}
return 0;
}
在我的代码中,底层函数不能正常工作,它通过了小的测试用例,但是当它为大型测试用例运行时,它失败了。在讨论中,有些人使用的是(sum/n)、<=k、和ll int,结果=sum/(k+1)-n+1;及其所有测试用例都通过了。
我们也可以用底层函数来完成这个任务,但是在我的代码中,底层函数不能正常工作。
有人能帮助我的代码,并指出为什么在我的代码中不工作,为什么我们在代码中使用k+1和n+1,我们能用任何不同的逻辑来做不同的事情吗?
发布于 2021-07-12 07:38:14
int n; // non const
int arr[n]; // bad
不要用VLA。考虑在需要可变长度的情况下使用向量。
问题约束指定值可以向上到1e9
。因此,在最大的2e5 (length of array) * 1e9
,这将溢出一个32位整数。使用int64_t
进行求和。
在这里使用地板也是多余的。积分值被隐式舍入。这样你就可以完全释放地板了。
https://stackoverflow.com/questions/68343302
复制相似问题