【问题标题】:Pigeonhole principle in Algorithm problems算法问题中的鸽巢原理
【发布时间】:2016-11-01 01:31:06
【问题描述】:

我正在阅读关于 Codefoces 上的一个问题的社论,但仍然无法理解它,因为它使用的是 PigeonHole 原理,我不知道如何在这个问题上应用鸽子原理

这是问题编辑:

在这个问题中,我们使用间隔数系统。这是一个非常重要的限制。让我们数一下手表显示屏上显示的位数,并称之为cnt。如果 cnt 大于 7,答案显然是 0(因为鸽巢原理)。如果 cnt 不大于 7,那么您可以暴力破解所有情况。

Here' 问题陈述 http://codeforces.com/contest/686/problem/C

袭击了 Gerda 出租车的劫匪非常成功地躲过了王国警察的掩护。为了更难抓住他们,他们使用自己的手表。

首先,因为他们知道王国警察不擅长数学,所以强盗使用以 7 为底的位置数字系统。其次,他们将一天划分为 n 小时,将每小时划分为 m 分钟。每个强盗的个人手表分为两部分:第一部分具有显示从 0 到 n - 1 的任何整数所需的尽可能少的位数,而第二部分具有显示所需的最少位数从 0 到 m - 1 的任何整数。最后,如果使用以 7 为底的位数少于此手表的位数,可以显示小时或分钟的某个值,则在符号的开头添加所需数量的零。

请注意,要显示手表的第 0 部分,必须至少有一个位置。

小强盗想知道时刻的数量(小时和分钟的特定值),以便手表上显示的所有数字都是不同的。帮助她计算这个数字。

【问题讨论】:

  • 我们不是传统学习的替代品。我们不只是想为您从其他网站上调出一些代码。
  • 这里鸽巢原理的要点就是简单地回答这种问题:“找到一个所有数字都不一样的8位数字”。这个任务显然是不可能的,因为只允许 7 个不同的数字(0,1,2,3,4,5,6)。

标签: java algorithm math


【解决方案1】:

“鸽笼原则”就是这样:如果我尝试将超过七只鸽子放入七个鸽笼中,那么其中一个洞中的鸽子不止一只。

在这里,中位数是鸽子,时间表示中的地点是鸽子。因此,如果您可以(快速)确定对于给定情况需要超过七个位置来表示时间,鸽笼原理告诉您不可能有具有不同数字的表示,并且您可以跳过真正缓慢的计数工作通过蛮力进行此类表示并继续下一个案例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多