hdu2141
题目大意:输入三系列数A,B,C,输入一个数X,问是否在A,B,C中存在A[i]+B[j]+C[k]=X,存在输出YES,不存在输出NO.
本题若果采用暴力法那么复杂度为O(n3)显然会超时,如果把A和B先加起来合成一个,于是需要做加法L*M次保存在p中,然后排序复杂度为O(L*Mlog(L*M)),最后使用二分·查找在新的序列p中查找X-C[k],此过程复杂度为N*log(L*M),设L=N=M=n,则f(n)=O(n2)+O(2n2longn)+O(2n*long)=O(n2longn)
#include<iostream>
#include<algorithm>
using namespace std;
#define l 501
inline bool Find(int p[], int n,int X);
int main(){
int L, M, N, S, i,k, Case = 0, x, j, redex,temp;
bool flag;
int p1[l], p2[l], p[l*l];
while (cin >> L >> M >> N){
Case++;
redex = 0;
for (i = 0; i < L; i++)
cin >> p1[i];
for (i = 0; i < M; i++){
cin >> temp;
for (j = 0; j < L; j++){
p[redex] = temp + p1[j];
redex++;
}
} /*以上将A和B相加*/
for (i = 0; i < N; i++)
cin >> p2[i];
sort(p, p + L*M); /*将P排序*/
cin >> S;
cout << "Case " << Case << ":" << endl;
while (S--){
cin >> x;
flag = 1;
for (i = 0; i < N; i++){
if (Find(p, L*M, x-p2[i])){ //在p中扫描查找x-p2[i]
flag = 0;
cout << "YES" << endl;
break;
}
}
if (flag)
cout << "NO" << endl;
}
}
return 0;
}
bool Find(int p[], int n, int X){/*二分查找函数*/
int left=0,right=n-1,mid;
while (right>=left){
mid = (left + right)/2;
if (p[mid] == X)
return true;
else if (X<p[mid])
right = mid-1;
else
left = mid+1;
}
return false;
}
hdu2141的更多相关文章
- hdu-2141 Can you find it?---暴力+二分
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2141 题目大意: 给ABC三个数组,给一个X,求是否存在Ai+Bj+Ck = X 思路: 等式转化成 ...
- (binary_search) Can you find it hdu2141
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- Can you find it?(数组+二分hdu2141)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- hdu-2141
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- Can you find it? HDU-2141 (二分查找模版题)
Description Give you three sequences of numbers A, B, C, then we give you a number X. Now you need t ...
- hdu2141 Can you find it? (二分)
Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now yo ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
- HDU2199,HDU2899,HDU1969,HDU2141--(简单二分)
二分是一种很有效的减少时间开销的策略, 我觉得单列出二分专题有些不太合理, 二分应该作为一中优化方法来考虑 这几道题都是简单的使用了二分方法优化, 二分虽然看似很简单, 但一不注意就会犯错. 在写二分 ...
随机推荐
- U盘安装XP SP3 professional手记
因为专业应用的软件无法在win7上运行,但在XP上是可以正常使用,所以有想法并有必要重装一下. 说句实在话,之前用U盘安装Windows7真的没有这么麻烦,没想到相同的技术用于安装XP 却是如此折腾人 ...
- 你会用shuffle打乱列表吗?
在网站上我们经常会看到关键字云(Word Cloud)和标签云(Tag Cloud),用于表明这个关键字或标签是经常被查阅的,而且还可以看到这些标签的动态运动,每次刷新都会有不一样的关键字或便签,让浏 ...
- 柯南君:看大数据时代下的IT架构(2)消息队列之RabbitMQ-基础概念详细介绍
一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...
- shell脚本中常见的一些特殊符号和作用详解
这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我 ...
- COCOS2d-x简易安装步骤
准备工作:1. 下载 cocos2d-x 下载地址:http://cdn.cocos2d-x.org/cocos2d-x-2.2.zip2. 下载 python 2.7.3 下载地址:h ...
- Java中的图形界面编程
前言 正文 Java中的图形界面编程 AWT/Swing AWT(Abstract Window ToolKits,抽象窗体工具集) 1.容器类:用来存储组件,实现容器布局 2.组件类:实现界面的一些 ...
- HTML5新增加的功能
1.部分代码代替了以前的代码 例如: 获取焦点 旧:document.getElementById("price");.focus; 新:<input ...
- 我的学习笔记之API-Guides翻译------AppComponent_Activites
10.26第一天开始:贵在坚持,边看遍整理 一个应用程序通常由多个Activity组成,它们之间是松耦合的关系.特别的,有一个Activity作为app的主Activity,当app首次启动时呈现给用 ...
- sql两表联合查询
SELECT yt_fault_componentId FROM yt_fault_component a join yt_fault_assembly b on a.yt_fault_assembl ...
- Struts2知识总结
整篇参考:http://blog.csdn.net/zq9017197/article/details/5958627 要搞清楚以下几点: 1.Struts2是什么?它的运行原理是什么? 2.Stru ...