//求组合数,限定取2或1 ll calc(ll a, int b) { if (b == 2) return ((a % mod) * ((a - 1) % mod) / 2) % mod; else return a % mod; }
intmain() { int n, in; ll ans = 0; cin >> n; while (n--) { cin >> in; ++arr[in]; } for (int i = 5000; i >= 1; i--) { if (arr[i] < 2) continue; ll a = calc(arr[i], 2); for (int j = 1; j <= i / 2; ++j) { if (!arr[j] || !arr[i - j]) continue; //两个短边相等的时候 if (j == i - j && arr[j] >= 2) { ll b = calc(arr[j], 2); ans = (ans + (a * b) % mod) % mod; } if (j != i - j) { ll b = calc(arr[j], 1), c = calc(arr[i - j], 1); ans = (ans + (a * b * c) % mod) % mod; } } } cout << ans; return0; }