上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来。
有 n n n 根木棒,现在从中选 4 4 4 根,想要组成一个正三角形,问有几种选法?
答案对 1 0 9 + 7 10^9+7 109+7 取模。
第一行一个整数 n n n。
第二行往下 n n n 行,每行 1 1 1 个整数,第 i i i 个整数 a i a_i ai 代表第 i i i 根木棒的长度。
一行一个整数代表答案。
4
1
1
2
2
1
#include
using namespace std;
const int Mod = 1e+9 + 7;
int n, ans;
int a[100005];
int cnt[50005];//桶
//求C(k,2),k个数中选2个
int C2(int k) {
return (k * (k - 1) % Mod) / 2;
}
int main() {
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
cnt[a[i]]++;
}
//a+b=c
//枚举两个短边
for (int i = 1; i <= 5000; i++) {//a
for (int j = i; j <= 5000; j++) {//b
if (i == j) {//a=b
ans = (ans + (C2(cnt[i + j]) * C2(cnt[i])) % Mod) % Mod;
} else {
ans = (ans + (C2(cnt[i + j]) * (cnt[i] * cnt[j]) % Mod) % Mod) % Mod;
}
}
}
cout << ans;
return 0;
}