- 题目大意
给出几个数,判断这些数能构成几个三角形。
- 解题思路
用两边之和大于第三边去判断(注意别用三重循环,时间复杂度太高会超时的,用lower_bound去找)。
- 代码
#include<cstdio>
#include<algorithm>
using namespace std;
int num[10100];
int main() {
int n, cnt = 0, t;
scanf("%d", &t);
while( t-- )
{
scanf("%d",&n);
int sum=0;
for( int i=1;i<=n;i++)
scanf("%d",&num[i]);
sort( num+1, num+1+n);
for( int i=1;i<=n-2;i++){
for( int j=i+1;j<=n-1;j++)
{
int c=num[i]+num[j];
long k = lower_bound (num+1, num+n+1, c) - num;
sum+=(k-j-1);
}
}
printf("Case %d: %d
", ++cnt, sum );
}
return 0;
}