我给出了multiset的大小N
及其总和S
。集合的元素应该是连续的,例如具有6个(K
)元素N=6
的多集{1,1,2,2,2,3}
,所以S=11
(多集总是包含第一个{{}} N
1}}重复自然数字。)
如何知道所做的总变化,以便不会重复,并且该集合会变得连续?
对于上面的示例,多集K
需要3次更改。因此,最后集合K
将变为{1,2,3,4,5,6}
。
我做的是,我找到了实际的总和(即n*(n+1)/2
)并减去了给定的总和。设为T
。
然后,T=ceil(T/n)
,然后答案变为2*T
,它适用于大多数情况。
但是,我想我错过了一些案例。是否存在一些算法来了解要更改的元素数量?
我只给出了多重集的大小和总和。
答案 0 :(得分:0)
正如您已经注意到的,对于给定的N
,总和应为S' = N * (N-1) / 2
。您将获得一些价值S
。
显然,如果S' = S
答案是0。
如果S'- S <= N - 1
,那么需要最少更改的多集合就是
{1, 2, ..., N-1, X}
其中X = N - (S' - S)
,其范围为[1, N-1]
。换句话说,X
弥补了必需和实际多集之间的总和差异。你的答案是1。
如果差异大于N-1
,那么N-1
也不能在多重集中。如果S'- S <= (N - 1) + (N - 2)
,则需要最少更改的多集合是
{1, 2, ..., N-2, 1, X}
其中X = N + (N - 1) - (S'- S)
,其范围为[1, N-2]
。你的答案是2。
概括,你会得到一个像这样的表:
S' - S | answer
-----------------------
[ 0, 0] | 0
[ 1, N-1] | 1
[ N, 2N-3] | 2
[2N-2, 3N-6] | 3
等等。您可以找到一个公式来获得N
和S
的答案,但使用简单的循环似乎要容易得多。我会把实现留给你。