知识点:枚举
做题要看数据的范围,一看木棍的长度那么小,就可以枚举长度,然后正三角形一定是两个相等的长边,然后两个短边拼成一个长边,枚举这两个短边就行了,然后就知道长边的长度了,用计数排序的思想,然后需要注意一下两个短边相等的情况,这个题就没了,还是比较简单的
#include <bits/stdc++.h>
using namespace std;
const int N = 5005, Mod = 1e9 + 7;
long long a[N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
cin >> x;
a[x]++;
}
long long ans = 0;
for (int i = 1; i <= 2500; i++) {
for (int j = i; j <= 5000 - i; j++) {
long long t = a[i + j] * (a[i + j] - 1) / 2;
if (j == i) ans = (ans + a[i] * (a[i] - 1) / 2 * t) % Mod;
else ans = (ans + a[i] * a[j] * t) % Mod;
}
}
cout << ans;
return 0;
}