NC221050. Ssyze'sGeometry
描述
输入描述
第一行有两个整数 , ,分别表示圆上点的个数和圆的周长。
第二行有 个不同的整数 ,分别表示 n 个点沿着周长的坐标。
输出描述
输出一个整数,表示满足要求的三角形的个数。
示例1
输入:
4 100 0 30 50 80
输出:
4
示例2
输入:
8 100 92 1 12 34 45 51 84 88
输出:
25
C++(clang++11) 解法, 执行用时: 252ms, 内存消耗: 17864K, 提交时间: 2021-04-20 14:17:47
#include<bits/stdc++.h> using namespace std; const int maxn=1e6*2+10; typedef long long ll; int n,l; ll ans; int d[maxn]; int main(){ cin>>n>>l; for(int i=1;i<=n;i++)scanf("%d",&d[i]); sort(d+1,d+1+n); for(int i=1;i<=n;i++)d[i+n]=d[i]+l; for(int i=1,j=1;i<=n;i++){ while(j<2*n&&(d[j]- d[i])*2<l)j++; ll an=(j-i-1); ans+=(an-1)*an/2; } ll tot=1ll*n*(n-1)*(n-2)/6; cout<<tot-ans<<endl; }