有人做了昨晚的 Codeforces div2 吗?

2019-08-19 15:38:14 +08:00
 huglight

想问下为什么 D 题只要不为 0 的数大于 128 个,输出的最小环节点数就为 3 呢?

3346 次点击
所在节点    算法
2 条回复
DaCong
2019-08-20 10:16:43 +08:00
其实并不需要大于 128,大于 120 即可。
首先,认识到一点:如果任何一个 bit 上的 1 多于 3 个,那么答案为 3,因为这已经是最短的环了。
而题目的数据范围是 10^18,59<log(10^18)<60,因此一个数最多要 60 个 bit 来储存。
根据抽屉原理,如果非零的不同数字多于 2*60=120 个,则至少有一个 bit 上是有大于等于 3 个的 1。
至于为什么很多人用了 64*2,是因为他们懒得精确去算 log(10^18),而是用了 64 位整数的上界。
huglight
2019-08-20 10:30:06 +08:00
@DaCong 非常感谢~~还是自己太菜了,不了解组合数学

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX