【发布时间】:2014-06-21 17:36:50
【问题描述】:
我想知道New Lottery Game 问题的有效方法。
彩票正在改变!彩票曾经有一台机器来生成随机中奖号码。但由于作弊问题,彩票决定增加另一台机器。新的中奖号码将是两台机器产生的两个随机数按位与运算的结果。
要找到 X 和 Y 的按位与,请将它们都写成二进制;如果 X 和 Y 的相应位均为 1,则二进制结果中的某个位为 1,否则为 0。在大多数编程语言中,X 和 Y 的按位与写成 X&Y。
例如: 旧机器生成数字 7 = 0111。 新机器生成数字 11 = 1011。 中奖号码将是 (7 AND 11) = (0111 AND 1011) = 0011 = 3。
通过这项措施,彩票希望减少欺诈索赔的案件,但不幸的是彩票公司的一名员工泄露了以下信息:旧机器将始终生成小于 A 的非负整数和新机器将始终生成一个小于 B 的非负整数。
Catalina 想中奖,为了一试,她决定购买所有小于 K 的非负整数。
鉴于 A、B 和 K,Catalina 想知道机器可以通过多少种不同的方式生成一对数字,从而使她成为赢家。
对于小输入,我们可以检查所有可能的对,但如何处理大输入。我想我们首先将二进制数表示为字符串,然后检查给出的答案小于K 的排列。但我似乎无法弄清楚如何计算 2 个二进制字符串的可能排列。
【问题讨论】:
-
你知道可以下载大家的解决方案吗?例如,您可以下载第十个第一的解决方案。
-
@ArnaudDenoyelle 是的,我尝试过,但我更喜欢解释。不幸的是,谷歌不发布社论
-
他们确实发布社论。例如,第 1A 轮已经结束,请耐心等待。
-
@user189 请把我重定向到链接
-
code.google.com/codejam/contests.html 检查“分析”链接。