CF1537A Arithmetic Array 题解
题目大意
有 \(t\) 组数据,每组数据是一个长度为 \(n\) 的数列,现在要你求出需要往数列中加入多少个非负整数才能使得数列的平均数为 \(1\)。
解决思路
考虑各种情况
- 如果平均数大于 \(1\),我们就要把平均数降下来,那肯定不能往里面加正数,只能往数列里加 \(0\) 。
- 如果平均数等于 \(1\),那么不需要加数。
- 如果平均数小于 \(1\),那就加一个正数即可。
求出平均数大于 \(1\) 时的加数量
首先,我们知道一堆数的平均数大于 \(1\),其实就是这堆数的和大于数的个数。
如果这些数的和为 \(sum\),个数为\(n\),假设要加 \(x\) 个 \(0\),很容易进行如下变换:
\[\begin{aligned}
sum+x\times 0&=n+x
\\sum&=n+x
\\x&=sum-n
\end{aligned}
\]
所以需要加 \(sum-n\) 个 \(0\)。
代码实现
#include <bits/stdc++.h>
using namespace std;
int t,n,sum,tool;
int main(){
cin>>t;
while(t--){//多组数据
cin>>n;
for(int i=1;i<=n;i++){
cin>>tool;
sum+=tool;//求和器
}
if(sum>n){
cout<<sum-n<<endl;//平均数大于1,输出和与个数的差
}
else if(sum==n){
cout<<"0"<<endl;//平均数等于1,直接输出0
}
else{
cout<<"1"<<endl;//平均是小于1,直接加一个大正数即可
}
sum=0;//记得清空
}
return 0;
}