首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组的平均值应小于或等于k

数组的平均值应小于或等于k
EN

Stack Overflow用户
提问于 2021-07-12 07:13:50
回答 1查看 244关注 0票数 0

给定一个数组,我们必须取一个数组的平均值,然后对该平均值进行处理,该值应该小于问题的k. Link:- https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/minimum-additions-0142ac80/

我的代码:-

代码语言:javascript
运行
复制
#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,我们能用任何不同的逻辑来做不同的事情吗?

EN

回答 1

Stack Overflow用户

发布于 2021-07-12 07:38:14

代码语言:javascript
运行
复制
int n; // non const
int arr[n]; // bad

不要用VLA。考虑在需要可变长度的情况下使用向量。

问题约束指定值可以向上到1e9。因此,在最大的2e5 (length of array) * 1e9,这将溢出一个32位整数。使用int64_t进行求和。

在这里使用地板也是多余的。积分值被隐式舍入。这样你就可以完全释放地板了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68343302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档