I - Counting Triangles (LightOJ - 1307)

- 题目大意

     给出几个数,判断这些数能构成几个三角形。

- 解题思路

     用两边之和大于第三边去判断(注意别用三重循环,时间复杂度太高会超时的,用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\n", ++cnt, sum );  
    }  
    return 0;  
} 

  

posted @ 2018-02-08 14:57  Alpacaddhh  阅读(145)  评论(0编辑  收藏  举报