问题1:有一个糖果的集合,里面有 n n n种糖果,每种有 c i c_i ci个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到两种不同的糖果
加强:有一个糖果的集合,里面有 n n n种糖果,每种有 c i c_i ci个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到两种不同的糖果,且他拿到糖果的数量大于等于 m ( m > 2 ) m(m>2) m(m>2)
记 s u m = ∑ c i sum=\sum c_i sum=∑ci m a x c = m a x { c 1 , c 2 , . . . , c n } = c i maxc=max\{c_1,c_2,...,c_n\}=c_i maxc=max{c1,c2,...,cn}=ci
1、 m a x c > ( m − 1 ) ∗ ( s u m − m a x c ) maxc>(m-1)*(sum-maxc) maxc>(m−1)∗(sum−maxc)
把每个小朋友看成是一个抽屉,当抽屉数大于 s u m − m a x c sum-maxc sum−maxc时一定存在一个抽屉全为最多的那个糖果,矛盾。
故 a n s < s u m − m a x c + 1 ans<sum-maxc+1 ans<sum−maxc+1
后按照分法: m − 1 m-1 m−1个最多糖果搭配 1 1 1个剩余糖果分给一个小朋友,可以知道
a n s > = s u m − m a x c + 1 ans>=sum-maxc+1 ans>=sum−maxc+1
故答案是 s u m − m a x c sum-maxc sum−maxc
2、 m a x c < = ( m − 1 ) ∗ ( s u m − m a x c ) maxc<=(m-1)*(sum-maxc) maxc<=(m−1)∗(sum−maxc)
在分给某个小朋友的时候我们尽量去减少我们的序列最大值,得到一个 m a x c ′ maxc' maxc′
若操作前的最大值位置等于操作后的最大值位置,则显然成立(因为由糖水公式比值肯定是非增的)
否则操作前的最大值位置的数
>
=
m
a
x
c
′
−
1
>=maxc'-1
>=maxc′−1
m
a
x
c
′
s
u
m
′
−
m
a
x
c
′
<
=
m
a
x
c
′
m
a
x
c
′
+
m
a
x
c
′
−
1
\frac {maxc'}{sum'-maxc'}<=\frac {maxc'}{maxc'+maxc'-1}
sum′−maxc′maxc′<=maxc′+maxc′−1maxc′
如果操作完后剩余的糖果堆数大于等于2的话,这个东西不等式肯定是小于1的,只剩一堆的话,该堆的糖果数量小于m,因为如果最后只剩一种糖果且堆数大于等于m,就不满足我们的取法或者不满足分类讨论中的要求了。
故答案等于 s u m m \frac{sum}m msum
问题2:有一个糖果的集合,里面有 n n n种糖果,每种有 c i c_i ci个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到 t t t种不同的糖果
加强:有一个糖果的集合,里面有 n n n种糖果,每种有 c i c_i ci个,要把这些糖果分给一些小朋友,使尽可能多的小朋友开心。某个小朋友开心,当他拿到 t t t种不同的糖果,且他拿到糖果的数量大于等于 m ( m > t ) m(m>t) m(m>t)
第一题如果是排好序的序列(降序)的话有一种做法,因为知道第一个数一定是在最多的那边取的,所以
a
1
<
=
(
a
2
+
.
.
.
+
a
n
)
/
(
t
−
1
)
a
1
+
a
2
<
=
(
a
3
+
.
.
.
+
a
n
)
/
(
t
−
2
)
.
.
.
a_1<=(a_2+...+a_n)/(t-1)\\ a_1+a_2<=(a_3+...+a_n)/(t-2)\\ .. .
a1<=(a2+...+an)/(t−1)a1+a2<=(a3+...+an)/(t−2)...
把多于不等式部分的
a
i
a_i
ai减掉就可以了
二分小朋友的数量 n u m num num,然后检查 n u m num num是否合法。