Content
有 \(n\) 个数 \(a_1,a_2,a_3,...,a_n\)。试求出使得 \(a_i\) 与其他所有整数的算术平均值相等的所有 \(i\)。
数据范围:\(2\leqslant n\leqslant 2\times10^5,1\leqslant a_i\leqslant 1000\)。
Solution
我们可以将其转化为:求出能满足 \(a_i=\dfrac{\sum\limits_{j=1}^na_j-a_i}{n-1}\) 的所有 \(i\)。直接在数列中扫一遍看能不能满足这个条件即可。注意精度问题,需要将 \(a_i\) 开成高精度的 \(\texttt{double}\)。
Code
#include <cstdio>
#include <algorithm>
using namespace std;
int n, ans[200007];
double s, a[200007];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%lf", &a[i]);
s += a[i];
}
for(int i = 1; i <= n; ++i)
if(a[i] == (s - a[i]) / (n - 1)) ans[++ans[0]] = i;
for(int i = 0; i <= ans[0]; ++i) {
printf("%d", ans[i]);
if(!i) puts("");
else printf(" ");
}
return 0;
}