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--(简单二分)
二分是一种很有效的减少时间开销的策略, 我觉得单列出二分专题有些不太合理, 二分应该作为一中优化方法来考虑 这几道题都是简单的使用了二分方法优化, 二分虽然看似很简单, 但一不注意就会犯错. 在写二分 ...
随机推荐
- 编程珠玑I算法总结
主要是根据编程珠玑后面的Algorithm附录总结了一下这本书里面的经典算法. 1 辗转相减求最大公约数 思想:最大公约数能整除i和j,则其一定也能整除i-j(if i>j) int gcd(i ...
- Android 开发ListView适配器优化
我们都知道Android中Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列 ...
- JQuery打造下拉框联动效果
做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面.考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后 ...
- MapReduce实现矩阵相乘
矩阵相乘能够查看百度百科的解释http://baike.baidu.com/view/2455255.htm?fr=aladdin 有a和b两个矩阵 a: 1 2 ...
- codechef Chef and The Right Triangles 题解
Chef and The Right Triangles The Chef is given a list of N triangles. Each triangle is identfied by ...
- Tiny Spring 分析一
近期一直想看spring的源代码,可是奈何水平太低,庞杂的源代码令我一阵阵的头晕. 非常有幸,在网上看到了黄亿华大神的<<1000行代码读懂Spring(一)- 实现一个主要的IoC容器& ...
- android入门——UI(5)
最近时间实在匆忙,博客的代码基本没有解释. 介绍ExpandableListView <?xml version="1.0" encoding="utf-8&quo ...
- Hadoop 架构初探
对流行Hadoop做了一些最基本的了解,暂时没太大感觉,恩先记点笔记吧. = = Hadoop 基本命令及环境安装 一.下载虚拟机镜像 目前比较流行的有以下三个: (CHD) http://www.c ...
- CXF 调用C#.net的WebService
原文链接:http://hi.baidu.com/pengfeiiw/blog/item/3203e29065aa3a8aa977a4d0.html 1.编写C#.net的WebService Ser ...
- Java 字符串截取函数 substring()
在String中有两个substring()函数,如下: 一:String.substring(int start) 参数: start:要截取位置的索引 返回: 从start开始到结束的字符串 例如 ...