zoukankan      html  css  js  c++  java
  • 2019中山大学程序设计竞赛(重现赛)斐波那契/

    2019中山大学程序设计竞赛(重现赛)

    1002 三角形(斐波那契)

    题意:给你n个木棒,判断其能否组成三角形。
    这道题当时没做出来,后来看了题解,感觉acm的水还是很深的。

    思路:判断能否组成三角形的情况比较多,故判断不能组成三角形的,那就是a[i]+a[i+1]=a[i+2],仔细一看这不是斐波那契数列吗?
    因为这个数据量很大5*e6,而且众所周知,斐波那契数列上升速度(指数)还是十分快的。
    F(100)=35422484179261915075>2的68次方,远远大于最长的棍子长度。
    所以我们可以得出当n>100(50也行)时必能组成三角形。
    1.n<100 先排序再进行比较,判断 ai+ai+1>ai+2;
    2.n>=100,直接判断"YES";
    在这里插入图片描述
    代码待补完:

    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<string>
    #include<bitset>
    #include<utility>
    #include<functional>
    #include<iomanip>
    #include<sstream>
    #include<ctime>
    #define ll long long
    using namespace std;
    
    int k[5000005];
    
    int main()
    {
    	//ios::sync_with_stdio(false);
    	int n;
    	while (scanf("%d", &n) != EOF)
    	{
    		if (n < 50)
    		{
    			for (int i = 0; i < n; i++)
    				scanf("%d", &k[i]);
    			sort(k, k + n);
    			int flag = 0;
    			for (int i = 0; i < n - 2; i++)
    			{
    				if (k[i] + k[i + 1] > k[i + 2])
    				{
    					flag = 1;
    					break;
    				}
    			}
    			if (flag)
    				printf("YES
    ");
    			else printf("NO
    ");
    		}
    		else
    			cout << "YES" << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    BUAA OO Unit1 表达式求导
    中介者模式
    命令模式
    观察者模式
    解释器模式
    策略模式
    迭代器模式
    模板方法模式
    代理模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/gidear/p/14198349.html
Copyright © 2011-2022 走看看