#B. [WFOI - 01] 硬币(coin)

    Type: RemoteJudge 1000ms 512MiB

[WFOI - 01] 硬币(coin)

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

你面前有一排 nn 硬币排成一线,同一堆硬币的面值相同,记第 ii 堆硬币的面值为 aia_i。而每堆硬币的数量都相同,记为 xx

现在你知道每第 ii 堆硬币的面值 aia_i,你需要确定一个正整数 xx,使得每堆硬币的总金额的方差最接近于一个正整数 kk

两数 “最接近” 的定义:两数之差的绝对值最小。

方差定义:方差 $s ^ 2 = \cfrac{(a_1 - \bar x)^2 + (a_2 - \bar x) ^ 2 + \cdots + (a_n - \bar x) ^ 2}{n}$,其中 xˉ\bar x 代表 xx 的平均值。

输入格式

第一行两个数 n,kn,k

第二行 nn 个数,第 ii 个数表示 aia_i,表示第 ii 堆硬币的面值 aia_i

输出格式

一行一个正整数,表示符合题意的 xx 值。如果有不同的答案,输出最小的一个。如果无论 xx 取什么值方差都为 00,输出一行 No answer!

7 47
7 2 4 6 3 7 10
3
4 4
4 4 4 4
No answer!

提示

【样例 #1\#1 解释】

x=3x=3 时,第 ii 个堆的硬币金额为 3×ai3\times a_i,这些硬币堆的金额分别为 21,6,12,18,9,21,3021,6,12,18,9,21,30,可以计算得这些硬币金额的方差约为 58.7858.78,可以证明当 x=3x=3 时方差最接近 4747

【样例 #2\#2 解释】

可以发现,无论 xx 的取值,方差都会为 00,所以输出 No answer!

【数据规模】

本题采用 Subtask 捆绑测试。

Subtask 编号 n,ain,\forall a_i\le kk\le 测试点数目\footnotesize\texttt{测试点数目}
Subtask #0 (20pts)(20\texttt{pts}) 10310^3 10910^9 66
Subtask #1 (25pts)(25\texttt{pts}) 10510^5 101210^{12}
Subtask #2 (25pts)(25\texttt{pts}) 101810^{18}
Subtask #3 (30pts)(30\texttt{pts}) 7×1067\times10^6 3×10183\times 10^{18}

对于 100%100\% 的数据,1n,ai7×1061\le n,\forall a_i\le7\times10^61k3×10181\le k\le3\times10^{18}。记原来 aa 数组的方差为 pp,则数据满足 p=0p=0p[0.25, 2631]p\in[0.25,\ 2^{63}-1]

【提示】

本题读入量较大,请使用合适的读入方式。此处推荐快速读入模板,对于 C/C++\texttt{C/C++} 语言,你也可以使用 scanf 语句完成读入。

为避免卡精度,建议 C/C++ 选手使用 double\texttt{double} 类型,并不建议使用 eps

二分数学test

Not Attended
Status
Done
Rule
IOI
Problem
3
Start at
2025-10-12 16:35
End at
2025-10-12 16:38
Duration
0.1 hour(s)
Host
Partic.
12