真抽象吧。。为什么前面三个小数据点反而没过啊。。求奆佬指正
查看原帖
真抽象吧。。为什么前面三个小数据点反而没过啊。。求奆佬指正
1245990
zhaoyiburui楼主2024/6/17 11:19
#include <bits/stdc++.h>
//选四个木棍拼成正三角形
using namespace std;
long long n;
long long num[5002] = {0};
long long MOD = 1000000007;
long long ans = 0;
int m = -1;
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        long long tmp;
        scanf("%lld", &tmp);
        num[tmp]++;
        m = (tmp > m)? tmp : m;
    }

    for(int i = 2; i <= m; i++)
    {
        if(num[i] >= 2) // 有两个及以上个木棍
        {
            // 选两个
            long long tmp1 = (num[i] * (num[i] - 1) / 2) % MOD;
            // 选剩下两个
            long long tmp2 = 0;
            for(int j = 1; j <= i / 2; j++)
            {
                if(i - j == j && num[j] >= 2)
                {
                    tmp2 += (num[j] * (num[j] - 1) / 2) % MOD;
                    break;
                }
                // 剩下两个组合
                tmp2 += num[j] * num[i - j];
                tmp2 %= MOD;
            }
            ans += tmp1 * tmp2;
            ans %= MOD;
        }
    }
    cout << ans;
    return 0;
}
2024/6/17 11:19
加载中...