绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
每日一题 | 帆船比赛问题
2020-08-19 13:53:02

每日一题 | 吃肉饼问题

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(intinput().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 -



分享好友

分享这个小栈给你的朋友们,一起进步吧。

TechFlow
创建时间:2020-03-19 11:13:43
机器学习、算法与数据结构、大数据相关和Python。 从纯基础开始的算法领域入门以及进阶内容。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • chengycz
    栈主

小栈成员

查看更多
  • 兔子爱喝红茶
  • 小雨滴
  • ittttliu
  • 栈栈
戳我,来吐槽~