码迷,mamicode.com
首页 > 其他好文 > 详细

2019中山大学程序设计竞赛 Triangle

时间:2019-04-20 00:22:19      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:hdu   ++   lse   c++   name   scanf   一个   for   bit   

技术图片

今天水了一发hdu上的中山校赛 这个题交了将近十遍才过......

就是说给 n 个木棍,如果能找出3个能组成三角形的木棍就输出yes 反之输出no

乍一看很简单 一个排序遍历一遍就好了

但是n值太大了,我试了一下,就算不加sort都会TLE......

问了一下大神才想出这个关键的条件:

假设 a1=1,a2=2,a3=3 那么这是最小的三个不能组成三角形的木棍,

所以如果n=4,那么a4最小是a2+a3=5

n=5,a5最小是8

................

当n=47时,a47=4807526976 这是大于题目中所给的 2^32 的条件的 所以如果输入的n>47就可以判断是yes了 如果小于47 遍历一遍也不慢~

#include<bits/stdc++.h>

using namespace std;
int i,n,a[5000005];

int main()
{

    while(scanf("%d",&n)!=EOF)
    {
        
        
        int flag=0;
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        if(n>47)
        cout<<"YES"<<endl;
        else
        {
        sort(a,a+n);
        for(i=n-1;i>=2;i--)
        {
            if(a[i-2]+a[i-1]>a[i])
            {
                flag=1;
                break;
            }
        } 
        if(flag)
        cout<<"YES"<<endl;
        else
        cout<<"NO"<<endl;
    }    
    }
}

 

2019中山大学程序设计竞赛 Triangle

标签:hdu   ++   lse   c++   name   scanf   一个   for   bit   

原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/10739477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!