链接:https://www.nowcoder.com/questionTerminal/9363dcb83ca44c61a2c1a8f65aa722b8
来源:牛客网

金闪闪死后,红A拿到了王之财宝,里面有n个武器,长度各不相同。红A发现,拿其中三件武器首尾相接,组成一个三角形,进行召唤仪式,就可以召唤出一个山寨金闪闪。(例如,三件武器长度为10、15、20,可以召唤成功。若长度为10、11、30,首尾相接无法组成三角形,召唤失败。)红A于是开了一个金闪闪专卖店。他把王之财宝排成一排,每个客人会随机抽取到一个区间[l,r],客人可以选取区间里的三件武器进行召唤(客人都很聪慧,如果能找出来合适的武器,一定不会放过)。召唤结束后,客人要把武器原样放回去。m个客人光顾以后,红A害怕过多的金闪闪愉悦太多男人,于是找到了你,希望你帮他统计出有多少山寨金闪闪被召唤出来。

输入描述:
第一行武器数量:n <= 1*10^7第二行空格分隔的n个int,表示每件武器的长度。第三行顾客数量:m <= 1*10^6后面m行,每行两个int l,r,表示每个客人被分配到的区间。(l<r)
输出描述:
山寨金闪闪数量。
示例1

输入

5
1 10 100 95 101
4
1 3
2 4
2 5
3 5

输出

3题解思路:1,首先,判断三个正整数a,b,c是否能组成三角形,判断方法是:将abc排序(a<=b<=c),然后如果a+b>c,则可以构成三角形。2,其次,判断一个区间[L,R]内是否能找到三个数使其构成三角形,可以将这R-L+1个元素取出并排序,然后从前往后三个三个判断,复杂度是O(len*log(len))。3,查询每次区间长度都在1~1e7之间,当然不能每次都暴力找,不然有1e6次查询,时间复杂度肯定爆炸,那么怎么处理呢?4,实际上,如果数一多,是非常容易构成三角形的,如果要刚好卡到边界,刚好不能构造成三角形(a+b==c),则要构造这样的数据:1,1,2,3,5,8......。对,其实就是斐波那契数列,题目的数据给出的数据在int范围内,然后我们发现大概在40多项的时候就不能构造出全都不满足构成三角形的数据了,下面是打表的出的结果。

所以,只要在给出的区间长度较大的,一定能构成三角形,区间长度较小的,则可以存下来排序后判断,所以本题最后的时间复杂度是O(m*45*log(45))。

#include<bits/stdc++.h>using namespace std;const int MAXN=(int)1e7 + 5;int n,a[MAXN],m;vector<int>v;int main() {    while(~scanf("%d",&n)) {        for(int i=1; i<=n; i++)scanf("%d",&a[i]);        scanf("%d",&m);        int cnt=0;        while(m--) {            int l,r;            scanf("%d%d",&l,&r);            if(r-l+1>=47)cnt++;            else if(r-l+1<3)continue;            else {                v.clear();                for(int i=l; i<=r; i++)v.push_back(a[i]);                sort(v.begin(),v.end());                int len=v.size();                bool flag=0;                for(int i=0; i<len-2; i++) {                    if(v[i]+v[i+1]>v[i+2]) {                        flag=1;                        break;                    }                }                if(flag)cnt++;            }        }        printf("%d\n",cnt);    }    return 0;}

转载于:https://www.cnblogs.com/dogenya/p/11184311.html

[编程题]山寨金闪闪 (面试题)相关推荐

  1. 哔哩哔哩 2019秋招编程题---山寨金闪闪

    分析:这是一道关于能否构成三角形的题目 构成三角形的条件:a+b>c(前提a<=b<=c,也就是排序)再加上a>0&&b>0&&c> ...

  2. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现

    看到有人写了阿里的面试题,心里痒痒,好久 没搞过这些了,写着实现一下 题目 2017年3月阿里在线编程题(实习内推) 给定一串数字 判断是否存在这三个元素,它们将数字串分为四个子串,其中每个子串的数字 ...

  3. 机器人 c语言编程题,机器人机器人小高试题模拟题

    "小小科学家"广东省第五届少年儿童科学教育体验活动 小机器人竞赛模拟试题 小学高年级组个人赛 参赛编号 ______ 学校:_________ 班级:_____ 姓 ...

  4. c语言红酒编程题,葡萄酒基础知识试题解析一

    原标题:葡萄酒基础知识试题解析一 单项选择题: 1.下列哪一组完全属于酿造红葡萄酒的品种?(B) A.霞多丽.赤霞珠.梅洛.品丽珠 B.赤霞珠.品丽珠.梅洛.黑比诺 C.雷司令.龙眼.天帕尼洛.桑娇维 ...

  5. 硬件工程师c语言编程题,硬件工程师考试试题 答案

    硬件工程师考试试题 答案 模拟电路 1. 基尔霍夫定理的内容是什么? a. 基尔霍夫电流定律:在电路的任一节点,流入.流出该节点电流的代数和为零. 基尔霍 夫电压定律:在电路中的任一闭合电路,电压的代 ...

  6. 剑指offer编程题Java实现——面试题3二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 下面是我实现的代码,修 ...

  7. 哔哩哔哩 2019秋招编程题合集

    1/14 [编程题]扭蛋机 #include<bits/stdc++.h> using namespace std; #define line cout << "-- ...

  8. 哔哩哔哩 2019秋招 山寨金闪闪

    原题链接:[编程题]山寨金闪闪 这是某节课前同学给我看的题,只不过他的本意在于令人愉♂悦的金闪闪,我的着眼点在于令人愉♂悦的题目. 就结果而言,这道题也确实让我愉♂悦了一整节运筹学课. 题目大意: 给 ...

  9. 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构

    数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...

  10. php编程题试题和答案,比较基础的php面试题及答案-编程题部分

    比较基础的php面试题及答案-编程题部分 1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名 例如: http://www.sina.com.cn/abc/de/fg.php?id ...

最新文章

  1. 大数据【四】MapReduce(单词计数;二次排序;计数器;join;分布式缓存)
  2. 专访@爱可可-爱生活:如何做好科学研究(干货满满)
  3. react-native 安卓支持 gif动态图
  4. 推荐.NET CF控件(Resco MobileForms Toolkit)
  5. C语言DP备忘计算指数N的斐波那契级数的算法(附完整源码)
  6. latex textbf没有用_LaTeX排版软件札记 Win10 LyX+TeXLive
  7. Pro*c源程序中使用宿主结构保存查询结果
  8. 直播 | 循序渐进 - DM8 数据存储管理
  9. 教你用Java7的Fork/Join框架开发高并发程序
  10. 如何迁移outlook邮件到另一个硬盘_猎头如何有效的搜寻与筛选简历
  11. CSS3下的渐变文字效果实现
  12. c语言会变颜色程序,【图片】(原创)用纯C变了个变色输出字符的程序。。。【c语言吧】_百度贴吧...
  13. Makefile编写练习题
  14. 亮风台AR眼镜震撼发布 HiAR 产品全面升级
  15. Linux 进程与信号的概念和操作 linux process and signals
  16. 在任务栏中添加控件 如360小助手、QQ桌面小助手
  17. day0学习开始,起于markdown
  18. 森林中的兔子java
  19. 凌晨四点钟深圳的风景
  20. 选择排序之简单选择排序

热门文章

  1. 视频直播画质核心影响因素分析:分辨率、帧率和码率
  2. 大数据:一张图让你明白什么是大数据
  3. excel日期改成字符类型_Excel表格中怎么把日期格式转换成文本格式?excel表格自定义格式的日期...
  4. 【Python笔记】Pandas时区处理
  5. CSI笔记【12】:阵列信号处理及MATLAB实现(第2版)阅读随笔(四)
  6. vue富媒体编辑器组件:vue-wangeditor的使用
  7. vue元素实现动画过渡效果
  8. 【攻略】淘宝前端智勇大闯关-第一季
  9. 【JAVA操作系统——可变式分区分配】首次适应算法
  10. bugly android升级,Android项目引入bugly在线更新