ITPub博客

首页 > > > 每日一题 | 帆船比赛问题

每日一题 | 帆船比赛问题

作者:chengycz 时间:2020-08-19 13:53:02 0 删除 编辑

每日一题 | 吃肉饼问题

codeforces的C题,链接:https://codeforces.com/contest/1393/problem/C

这道题非常巧妙,是一道思维题。我们很容易想到,间隔的最小距离取决于出现次数最多的数。

假设这个数是u,出现了v次。那么我们把它均分到n个空格当中,v个数有v-1个间隔,所以每个间隔最大是m = (n - 1) // (v-1)。n-1是因为末尾的元素不产生空格但是会占据位置。我们只需要把剩下的数填入这v-1个空格当中就可以了,它们之间的间隔一定不会小于m。

但还有一个问题是,出现次数达到v的数可能并不只有u,一样可以用上面的方法,只是末尾要额外去掉这些数,有多少个数字出现了v次,就需要减去几。我们假设有y个数字出现了v次。那么答案就是(n - y) // (v - 1) - 1。最后要-1是因为每个区间的长度要去掉1才是间隙的距离。

AC代码:

from collections import Counter

t = int(input())
for _ in range(t):
    n = int(input())
    vals = list(map(int, input().split(' ')))
    c = Counter(vals)
    _, num = c.most_common()[]
    if num == n:
        print()
        continue

    for k, v in c.items():
        if v == num:
            n -= 1

    print(n // (num - 1) - 1)

今日问题

帆船比赛问题

有N个选手要参加帆船比赛,帆船比赛规定只能两人组队,并且为了保证公平每一队的选手的体重之和应该一样。现在给定这n个选手的体重,要求将他们尽可能多得凑成队伍,请问最多能够凑成多少队?

样例

最多t组数据,n小于50

- END -



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69966956/viewspace-3158411/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-03-19

  • 博文量
    238
  • 访问量
    2598