思路:用可以组成的所有三角形个数减去不包含圆心的三角形个数,得到包含圆心的三角形个数。
计算方法:不包含圆心的三角形在同一半圆,每个点与圆心连线和极轴顺时针的夹角等于,对能组成不过圆心的三角形的三个点,按逆时针顺序标号为x1,x2,x3;
其满足,.枚举起点从所种任选两个点作为后两个点,计算出以为起点的不包含圆心的三角形。
AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll n, l;
ll ans = 0;
ll dat[2000001];
queue<ll> q;
void solve()
{
    cin >> n >> l;
    for (ll i = 0; i < n; i++)
    {
        cin >> dat[i];
    }
    sort(dat, dat + n);
    for (ll i = 0; i < n; i++)
    {
        dat[i + n] = l + dat[i];
    }
    double t = 1.0*l / 2;
    q.push(dat[0]);
    ll index = 1;
    for (ll i = 0; i < n; i++)
    {
        ll now = q.front();
        q.pop();
        while (dat[index] - now < t)
        {
            q.push(dat[index++]);
        }
        ll m = q.size();
        ans += (m - 1) * m / 2;
    }
    cout << n * (n - 1) / 2 * (n - 2) / 3 - ans << endl;
}
int main()
{
    int n__ = 1;
    // cin >> n__;
    while (n__--)
    {
        solve();
    }
    return 0;
}