挑战程序设计竞赛——抽签Ⅱ
目录
- 题目
- 解析
- 二分查找
- AC代码
题目
解析
牌的数量增加到了1000,因此如果使用四个for
循环,肯定会超时,当n=1000
时,我们的时间复杂度就是n^4^
,肯定寄了,所以我们要对代码进行优化,想想看能不能减少一个for()
,因此我们发现可以把最内层的for
换成查找,这里的查找用的是二分查找,时间复杂度为logn
,这样一来时间复杂度就变成了n3logn,一下子快了不少,但是这样交上去还是有问题,我们还要更快,因此,我们可以再淦掉一个for
循环,因为4层for
循环,内两层for
循环就是用来查找是否有值等于m-x[i]-x[j]
,我们可以事先把内两层循环可能产生的值枚举出来,然后再配合二分查找,把时间复杂度降低到n2logn,这样就能AC了。
二分查找其实不用自己写,头文件<algorithm>中就包含了
binary_search(Begin_Iterator,End_Iterator,key)
当然了,自己写也没什么问题
二分查找
bool Binary_search(int *x,int i,int j,int key){sort(x,x+n);//对数组排序while(i<=j){int p=(i+j)/2;if(x[p]>key){j=p-1;}else if(x[p]<key){i=p+1;}else{return true;}}return false;
}
AC代码
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;int main(){int n,m;scanf("%d %d",&n,&m);const int MAX_SIZE=1010;int x[MAX_SIZE];for(int ix=0;ix<n;++ix){scanf("%d",&x[ix]);}//产生枚举vector<int>xx;for(int i=0;i<n;++i){for(int j=0;j<n;++j){xx.push_back(x[i]+x[j]);}}//二分查找前先排序sort(xx.begin(),xx.end());//两轮搜查+二分查找for(int i=0;i<n;++i){for(int j=0;j<n;++j){int key=m-x[i]-x[j];if(binary_search(xx.begin(),xx.end(),key)){puts("Yes");return 0;}}}puts("No");return 0;
}
挑战程序设计竞赛——抽签Ⅱ相关推荐
- 挑战程序设计竞赛(第2版)》
<挑战程序设计竞赛(第2版)> 基本信息 作者: (日)秋叶拓哉 岩田阳一 北川宜稔 译者: 巫泽俊 庄俊元 李津羽 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787 ...
- 《挑战程序设计竞赛》 读后感(转载)
<挑战程序设计竞赛> 读后感 最近要开始准备面试找工作,算法是准备的重中之重,舍友推荐了<挑战程序设计竞赛>这本书.花了一周的时间大体过了一遍,该书真切地让我理解了" ...
- 《挑战程序设计竞赛(第2版)》习题册攻略
本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...
- POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》
为什么80%的码农都做不了架构师?>>> POJ 1150 The Last Non-zero Digit超大组合数:求超大组合数P(n, m)的最后一个非零位.4.1更加复杂 ...
- POJ 3735 Training little cats 题解 《挑战程序设计竞赛》
为什么80%的码农都做不了架构师?>>> POJ 3735 Training little cats调教猫咪:有n只饥渴的猫咪,现有一组羞耻Play,由k个操作组成,全部选自: ...
- POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》
为什么80%的码农都做不了架构师?>>> POJ 3608 Bridge Across Islands跨岛大桥:在两个凸包小岛之间造桥,求最小距离?3.6与平面和空间打交道的计 ...
- AOJ 1312 Where's Wally 题解《挑战程序设计竞赛》
为什么80%的码农都做不了架构师?>>> 本文由码农场 同步,最新版本请查看原文:http://www.hankcs.com/program/algorithm/aoj-131 ...
- ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)
白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...
- 挑战程序设计竞赛——详解DFS及BFS
挑战程序设计竞赛--详解DFS及BFS 一.学会要用到的stl函数,Stack.Quene.Pair 1.Stack(DFS隐式的用到,并与Queue对比记忆) 头文件==#include== sta ...
- 【操作指导 | 代码实现】挑战程序设计竞赛2:算法和数据结构
书籍封面 第一章 前言 1. 本人衷心建议 ~~~~~~ 如果你是一位初学者,我指的是你只会基本的 C/C++ 编程,即使编的很烂,这本书对于你算法和数据结构的提升非常有帮助,所涉及的每一 ...
最新文章
- raconter ce qui s'est passé
- Mac 技术篇-修改默认的python版本,mac最新版Python3.7.4的安装配置
- Oracle AWR 报告中 No data exists for this section of the report 说明
- Hasor JDBC 的难关,嵌套事务处理思路
- WM6 Rapi 开发(二) Hello World
- 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...
- 算法导论 练习12.1
- linux查看及修改文件权限以及相关
- Python入门之经典函数实例
- 重读《从菜鸟到测试架构师》-- 测试专家的第一步
- 怎么样用阿里云RDS数据库
- mysql数据库技术与项目课后答案_数据库技术与应用mysql版答案
- ruoyi增加导入导出
- el-input输入字母转化大写字母
- Python数据分析与机器学习实战<九>titanic数据集分析实例
- 【Manual】Memory Cache Control
- 2022下半年软考合格标准是多少?你可知?
- php word excel表格数据库,记一次使用PHP将word转为excel的经历
- DockWidget
- FlashPaper打印机未能正确安装的解决办法