我有三个数字:N,M和D,我被告知:
N * M * D <= 5,200,000
还有那个
N <= 1000,M <= 1000,D <= 200
所以我无法声明一个大小为[1000][1000][200]
的数组。我想要声明一个大小为5,200,000的数组,并确定每个N,M,D的唯一ID。
抱歉我的英文。
答案 0 :(得分:0)
假设N
,M
和D
都是>= 0
,
((N * 1001) + M) * 1001 + D
应该是无碰撞的。
答案 1 :(得分:0)
因此它们可以用10位(或更少)表示,那么为什么不用(D <&lt; 20)|(M <&lt; 10)|(N)?它适合32位整数,所以很不错。
答案 2 :(得分:0)
我找到了一个问题的答案,符合5,200,000个整数的限制。
令a-b-c是我们想要从中得到唯一值的三个数,并且n-m-d是它们的极限(a&lt; = n,b <= m,c <= d)。 a-b-c中的每个数字都代表一个来自不同基数的数字,我们的目标是将这个数字转换为十进制数。
唯一值= c +(b * d)+(a * m * d)
设K为唯一值,我们想得到K代表的状态(a,b,c)
C ^ = K%d;
K / = d;
B =ķ%米;
K / =米;
在进行= K;