Cly的三角形 (思维+斐波那契)
题目链接:点击这里
题目大意:
给出一个长度为 nnn 的序列 aaa ,有 qqq 次询问,每次询问含有一组 l,rl,rl,r 求 ala_lal 到 ara_rar 中是否能找出三条边使之构成三角形
题目分析:
我们先从暴力出发,我们发现:
对于一次询问的 l,rl,rl,r 我们将 ala_lal 到 ara_rar 进行从小到大的排序,然后逐个枚举相邻三个的元素,如果满足 a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2] 则可以构成三角形,如果 a[i]a[i]a[i] 和 a[i+1]a[i+1]a[i+1] 都不能和 a[i+2]a[i+2]a[i+2] 构成三角形那么其他的数更没办法满足两边之和大于 a[i+2]a[i+2]a[i+2] 。但是其复杂度是 O(nlogn)O(nlogn)O(nlogn) 是难以支持 qqq 次查询的
我们继续考虑优化 a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2]a[i]+a[i+1]>a[i+2] ,我们发现当让不等号为等号时有 a[i]+a[i+1]=a[i+2]a[i]+a[i+1]=a[i+2]a[i]+a[i+1]=a[i+2] 此式子为斐波那契数列的递推式,而我们知道斐波那契数列在第 464646 项的时候就爆 intintint 了,题目给出a[i]a[i]a[i] 的范围是 a[i]≤1e9a[i]\le 1e9a[i]≤1e9 ,因此当 r−l+1≥45r-l+1\ge 45r−l+1≥45 即区间长度大于 454545 时我们可以直接判断其可以找到三个元素使之作为三角形的三边,对于 r−l+1<45r-l+1< 45r−l+1<45 时用之前那个 nlognnlognnlogn 的方法暴力处理即可,其时间复杂度为 O(q45log45)O(q45log45)O(q45log45)
具体细节见代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int read()
{int res = 0,flag = 1;char ch = getchar();while(ch<'0' || ch>'9'){if(ch == '-') flag = -1;ch = getchar();}while(ch>='0' && ch<='9'){res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';ch = getchar();}return res*flag;
}
const int maxn = 1e5+5;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
int n,q,a[maxn],tmp[maxn];
int main()
{n = read();q = read();for(int i = 1;i <= n;i++)a[i] = read();while(q--){int l = read(),r = read();int len = r-l+1;if(len >= 45) {puts("clynb");continue;}if(len <= 2) {puts("clycdd");continue;}for(int i = 0;i < len;i++)tmp[i] = a[l+i];sort(tmp,tmp+len);bool flag = false;for(int i = 2;i < len;i++){if(tmp[i-2]+tmp[i-1] > tmp[i]){flag = true;break;}}if(flag) puts("clynb");else puts("clycdd");}return 0;
}
Cly的三角形 (思维+斐波那契)相关推荐
- python打九九乘法表上三角下三角_python经典练习题之九九乘法表、打印菱形、打印对顶三角形、斐波拉契数列、素数......
CSDN 双十一 活动优惠提前抢!全站好课1元起,万券齐发折上折! 11.11 超值膨胀金[10元抵100元]限量发放!11月11日当天全站通用,更有机会享受折上折优惠!仅限299份,先到先得! 学学 ...
- python打九九乘法表上三角下三角_python经典练习题之九九乘法表、打印菱形、打印对顶三角形、斐波拉契数列、素数... - 小黑电脑...
学学习简单的练习,学到后面会有越来越多的解法来写! 作业的目的是为了让大家熟悉程序语言,锻炼将思路转换成程序逻辑. 九九乘法表 help(print) 先思考能不能打印出方阵 # 1 方阵 # 1 方 ...
- matlab兔子繁殖问题,斐波那契数列在《疯狂动物城》兔子繁衍中的应用
摘 要: 计算思维的构建有助于帮助学生将实际问题转换为透明易懂的框架算法, 并借助计算机解决.以电影<疯狂动物城>中的兔子繁殖问题为例, 引出斐波那契数列, 引导学生将数学表达式转化 ...
- 用程序猿思维、程序设计师思维两种方式写求斐波那契数列的方法。
//用Java实现斐波那契数列(Fibonacci) public class Test {public int f(int n)//n代表第几个数字.程序返回它相应的值{return n>2? ...
- 斐波那契数列和帕斯卡三角形问题
1.斐波那契数列:用for循环来求解 题目:斐波那契数列是自然序列,定义如下: F1=1 F2=1 ... Fn=Fn-1+Fn-2(n>2) 输出该数列的前n项 代码: #include< ...
- python打九九乘法表上三角下三角_Python-零基础自学系列之九九乘法表、打印菱形、打印对顶三角形、打印闪电、斐波拉契数列、素数...
刚开学学习简单的练习,学到后面会有越来越多的解法来写! 作业的目的是为了让大家熟悉程序语言,锻炼将思路转换成程序逻辑. 九九乘法表 help(print) 先思考能不能打印出方阵 # 1 方阵 # 1 ...
- 计算斐波那契数列第100项(二维数组思维转换)
斐波那契数列第100项肯定很多位,常规的数据类型肯定存储不下,所以!!要进行换个思路!!即二维数组 反正我觉得这样还挺方便的咯 用二维数组的每一行存储每一项的值,从每一行的最后一列开始,如果>1 ...
- 【王道思维扩展1】求解斐波那契数列的递归和非递归算法,并分析两种时间复杂度
1.斐波那契数列 2.递归与非递归的实现 1).递归 时间复杂度O(2^N) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #incl ...
- 关于斐波那契与三角形
斐波那契的一个小性质:斐波那契数列中任意三个数字都不能组成三角形 定理:给出一个非空的由正整数组成的多重集合A,若A中的元素无法组成三角形的三边,则A中的最大元素maxA>=F(A),其中F(A ...
最新文章
- Visual Studio中断NPM套件库服务
- LIVE 预告 | 华为诺亚韩凯:Transformer in Transformer
- PolarSSL 1.2.0 发布,SSL 加密库
- hibernate官方新手教程 (转载)
- Flex4中的皮肤(2): Skin State
- Qt工作笔记-QListWidget鼠标拖动,一个到另一个,并遍历
- python导入mongodb_python实现mongodb的备份与导入
- QuickSort 快速排序
- java对存放实体的list进行排序
- 五.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---3.laserOdometry.cpp--前端雷达里程计和位姿粗估计
- echart同一个dom下多次动态渲染值,防止值、事件重复互相影响
- 怎样使用OUTLOOK收发邮件 小雨
- Contos7 postfix dovecot及postfixAdmin Roundcube整合配置
- 手机是如何做到精准定位的
- CSS 深入理解absolute
- 机器人笔记psv中文_《机器人笔记》白金攻略 机器人笔记奖杯攻略
- XUPT新生赛题目回顾(1)
- 1.3-聊天机器人的模块和框架
- 广州楼市:400W,高升值潜力的热门板块!
- 用微信小程序实现视频通话