比赛 NOIP2025模拟赛3 评测结果 AAAAAAAAAA
题目名称 Good Triplets 最终得分 100
用户昵称 淮淮清子 运行时间 1.239 s
代码语言 C++ 内存使用 31.99 MiB
提交时间 2025-11-26 11:48:35
显示代码纯文本
#include<iostream>
using namespace std;
const int MAXN = 1e6 + 5;
typedef long long ll;
ll sum[MAXN << 1], two[MAXN << 1], a[MAXN];
ll n, c, ans = 0;
inline ll C(ll x){
    return x * (x - 1) / 2;
}
int main(){
    freopen("Triplets.in", "r", stdin);
    freopen("Triplets.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> c;
    for(ll i = 0;i < n;i ++){
        ll x; cin >> x; a[x] ++;
    }
    sum[0] = a[0 % c]; two[0] = C(a[0 % c]);
    for(ll i = 1;i < (c << 1);i ++){
        sum[i] = sum[i - 1] + a[i % c];
        two[i] = two[i - 1] + C(a[i % c]);
    }
    ll m = c / 2;
    bool flag = (c & 1);
    for(ll i = 0;i < c;i ++){
        if(!a[i]) continue;
        ans += a[i] * (sum[i + m - (flag ? 0 : 1)] - sum[i]) * (sum[i + c - 1] - sum[i + m]);
    }
    for(ll i = 0; i < c; i++){
        if(!a[i]) continue;
        ans -= a[i] * (C(sum[i + m] - sum[i]) - (two[i + m] - two[i]));
    }
    cout << ans / 3 << '\n';
    return 0;
}