天天看點

挑戰程式設計競賽——1.61三角形

有n根棍子,棍子i的長度為ai,從中選出3根棍子組成周長盡量長的三角形,輸出最大周長,若無法組成,則輸出0.

3<=n<=100

1<=ai<=10^6

樸素做法就是n^3;但是n大點的話就死定啦

下面是nlogn的

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define ll long long
#define ul unsigned long long
int cmp(const void*a,const void*b)
{
    return *(int *)b-*(int *)a;
}
int a[];
int main()
{
    //freopen("in.txt","r",stdin);
    int n;
    while(~scanf("%d",&n)){
        for(int i=;i<n;i++)
            scanf("%d",&a[i]);
        qsort(a,n,sizeof(a[]),cmp);
        for(int i=;i<=n-;i++)
            if(a[i]-a[i+]<a[i+])
            {
                printf("%d\n",a[i]+a[i+]+a[i+]);
                break;
            }
            else if(i==n-)
            {
                printf("0\n");
            }
    }
}