- 题目大意
给出几个数,判断这些数能构成几个三角形。
- 解题思路
用两边之和大于第三边去判断(注意别用三重循环,时间复杂度太高会超时的,用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; }