同心球

时间:2015-10-04 16:26:40

标签: algorithm python-2.7 math sequence dynamic-programming

提供了具有上半球和下半球半径的两个不同列表。第一个列表包括 N 上半球索引1到 N ,第二个列表 M 下半球索引1到 M 。半径 R 的球体可以取半径 R 的上半部分和半径 R 的下半部分。此外,您可以将球体放入更大的球体并创建一系列嵌套的同心球体。但是你不能将两个或多个球体直接放入另一个球体中。

如果有一系列( D + 1 )嵌套球体,我们可以将此序列称为 D - 序列。

找出可能有多少不同的 X 序列( 1 < = X < = C )。如果在一个 X 序列中使用的任何半球的索引与另一个不同,则 X 序列与另一个序列不同。

INPUT

第一行包含三个整数: N 表示上半球的数量, M 表示下半球的数量, C

第二行包含 N 以空格分隔的整数,表示上半球的半径。

第三行包含 M 以空格分隔的整数,表示下半球的半径。

输出

输出一行包含 C 以空格分隔的整数,以模 1000000007 的方式构建 i -sequence的方式。

示例

输入

3 4 3

1 2 3

1 1 3 2

输出

5 2 0

我正在寻找那些属于上半球和下半球列表的元素,这样它们就可以形成一个球体,然后通过比较它们在两个半径列表中的计数来获取它们的最大数量。

并且,因此,对于 C <1> 元素的 C 总和,得出答案。

如何有效地计算上述内容还是有其他方法吗?

1 个答案:

答案 0 :(得分:0)

伙计这是我的第一个答案。当我在这里学习时,暂时把鞭子给我吧。

首先找到每个半径可能的球体数量。

no of spheres: 2 1 1
Having Radii:  1 2 3

现在,因为我们可以在半径为r的球体中安装半径为R的球体,使得R> r,我们需要做的就是找到no。在所有可能形成的球体列表中增加长度为2,3的子序列,......直到c。

List of possible spheres:[1,1*,2,3](* used for marking)

考虑D1:它有2个球体。试着找到没有。增加上面列表中长度为2的子序列。 他们是:

[1,2],[1*,2][1,3][1*,3][2,3]

因此ans是5。 得到它?? 现在该如何解决: 它可以通过使用Dp来完成。朴素解决方案具有复杂性.O(n ^ 2 *常数)。 您可以按照以下链接中提供的内容进行操作Dp solution。 值得一提的是,确实存在使用BIT,分段树等的更快的方法。

它类似于SPOJ problem