【发布时间】:2013-12-14 13:57:10
【问题描述】:
给定两个正整数a,b (1
L = {x * y | 1 <= x <= a, 1 <= y <= b, x,y is integer}
R = {x ^ y | 1 <= x <= a, 1 <= y <= b, x,y is integer},
^ 是异或运算
对于任意两个整数:A∈L,B∈R,我们将B格式化为n+1(n为b的十进制数)十进制数(B前面填0),然后将B连接到结束A,得到一个新的整数AB。
计算所有生成的整数AB的总和(如果总和超过,则返回“sum mod 1000000007”,mod表示模运算)
注意:你的算法时间不超过3秒
我的算法很简单:我们可以很容易的得到集合R中的最大值,R中的元素是0,1,2,3...maxXor,(元素max( a,b) 可能不在 R) 中,使用哈希表计算集 L。但是当 a = 30, b = 100000 时算法消耗 4 秒。
举个例子:
a = 2, b = 4, so
L = {1 * 1, 1 * 2, 1 * 3, 1 * 4, 2 * 1, 2 * 2, 2 * 3, 2 * 4} = {1, 2, 3, 4, 6, 8}
R = {1^1,1^2,1^3,1^4,2^1,2^2,2^3,2^4} = {0, 1, 2, 3, 5, 6}
所有生成的整数AB是:
{
100, 101, 102, 103, 105, 106,
200, 201, 202, 203, 205, 206,
300, 301, 302, 303, 305, 306,
400, 401, 402, 403, 405, 406,
600, 601, 602, 603, 605, 606,
800, 801, 802, 803, 805, 806
}
所有AB的总和是14502
【问题讨论】:
-
您需要发布您的代码,以便人们可以看到哪里(如果有的话)做错了。
-
也许你应该根据复杂性来定义性能要求,因为,你知道,我有一台很棒的超级计算机,而且它在不到 3 秒内就完成了
-
@dkrikun 这听起来像是编程竞赛的问题 - 这些通常使用中档计算机,并且不给出时间复杂度要求。
-
你是如何构建集合 L 的?请出示您的代码。
-
@splrs 我 psot 我的代码