2436: 【普及/提高-】【P3799】小 Y 拼木棒
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
有 根木棒,现在从中选 根,想要组成一个正三角形,问有几种选法?
答案对 取模。
输入
第一行一个整数 。
第二行往下 行,每行 个整数,第 个整数 代表第 根木棒的长度。
输出
一行一个整数代表答案。
样例输入 复制
4
1
1
2
2
样例输出 复制
1
提示
数据规模与约定
- 对于 的数据,保证 。
- 对于 的数据,保证 ,。
#include<bits/stdc++.h>
using namespace std;
int main(){
long long counts[5005] = {0},n,tmp,ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> tmp;
counts[tmp]++;
}
for (int i = 1; i <= 2500; i++) {
for (int j = i; j <= 5000-i; j++) {
int k3=counts[i+j], k1 = counts[i], k2 = counts[j];
if (k3 >= 2) {
if (i == j && k1 >= 2) {
tmp = k1*(k1-1) / 2*k3*(k3-1) / 2 % 1000000007;
ans += tmp;
}
if (i != j && k1 >= 1 && k2 >= 1) {
tmp = k1 * k2 * k3 * (k3-1) / 2 % 1000000007;
ans += tmp;
}
}
}
}
ans %= 1000000007;
cout << ans;
return 0;
}