题目描述
我虽无意逐鹿
却知苍生苦楚。
岩神钟离具有改造地形的能力,他可以创造出很多岩脊。由于失去了神之心,创造的能力有所下降,他只能创造出 n 种岩脊, 第 i 个岩脊的长度为 ai。众所周知,三角形是最稳定的结构,他想知道,在所有的岩脊中,任选三个i<j<k,有多少种选法满足 ai,aj,ak 能组成三角形,两种选法不同当且仅当两次选择的 i,j,k 至少有一个不同。
输入格式
从文件 rock.in中读入数据。
一行一个整数,n 接下来一行 n 个整数,表示岩脊是ai 长度。
输出格式
输出到文件 rock.out 中。
一行一个整数,表示能构成三角形的个数
样例输入
8
1 3 4 5 5 5 7 7
样例输出
37
数据范围
对于 10% 的数据,保证 n=5
对于另外 30% 的数据,保证 n=100
对于另外 30% 的数据,保证 ai≤100
对于全部的数据,保证 2≤n≤5×103,1≤ai≤2×109
代码
//温馨提示,不开long long 只能得10分
#include<bits/stdc++.h>
using namespace std;
long long arr[50005],n,cnt;
int main(){
//代码读写模板
freopen("rock.in","r",stdin);
freopen("rock.out","w",stdout);
cin>>n;
for(long long i=1;i<=n;i++) cin>>arr[i];
sort(arr+1,arr+n+1);
for(long long i=1;i<=n-2;i++){
for(long long j=i+1;j<=n-1;j++){
long long l=j+1,r=n;
while(l<=r){//二分
long long mid=(l+r)/2;
if(arr[mid]>=arr[i]+arr[j]) r=mid-1;
else l=mid+1;
}
cnt+=r-j;
}
}
cout<<cnt;
return 0;
}