Advertisement

三根等长的木棒

阅读量:

共有 nn 根木棒, 现在需要从中选出 44 根, 希望构成一个正三角形, 共有多少种选择方法? 答案需对 10^9+7 取模. 输入格式为: 第一行给出一个整数 n.

第二行 n 个整数,第 i 个整数 a i 代表第 i 根木棒的长度。

输出格式
一行一个整数代表答案。

1 1 2 2
思路:选取四个构成正三角形的木棒,则必有a=b=c+d。我们可以在两层循环中选取两个木棒后即可计算得出结果(由于数据可能很大而无需担心木棒长度过大)。为了提高效率,在程序实现中我们采用桶排序的思想:将不同长度的木棒分别存放在不同的数组空间中(这里我们用数组p表示),其中p[i]表示长度为i的木棒的数量。
接下来我们需要根据ab的关系来判断不同情况下的组合数(其中cc(int n)表示从n个元素中取出两个的方法数)。
a≠b时:
这种组合的数量等于长度为aa的木棒数量乘以长度为bb的木棒数量再乘以长度为(a+b)(a+b)的数量。
a=b时:
因为我们在前一步已经取走了一根长度为aa的"桶"中的一个元素(即数组p中的一个计数器),所以在计算这种情况下满足条件的情况数目时需要减去这一种可能性。
因此在这种情况下满足条件的情况数目等于:
(数组p中对应于aa的数量)乘以(数组p中对应于bb的数量减一)再乘以数组q中对应于(a+b)$(a+

全部评论 (0)

还没有任何评论哟~