题目大意:输入三系列数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的更多相关文章

  1. hdu-2141 Can you find it?---暴力+二分

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2141 题目大意: 给ABC三个数组,给一个X,求是否存在Ai+Bj+Ck = X 思路: 等式转化成 ...

  2. (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 ...

  3. Can you find it?(数组+二分hdu2141)

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  4. hdu-2141

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  5. 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 ...

  6. 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 ...

  7. ACM训练计划建议(写给本校acmer,欢迎围观和指正)

    ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...

  8. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  9. HDU2199,HDU2899,HDU1969,HDU2141--(简单二分)

    二分是一种很有效的减少时间开销的策略, 我觉得单列出二分专题有些不太合理, 二分应该作为一中优化方法来考虑 这几道题都是简单的使用了二分方法优化, 二分虽然看似很简单, 但一不注意就会犯错. 在写二分 ...

随机推荐

  1. outlook 2007如何设置自动转发功能

    "工具" => "规则和通知" => 新建规则 => "邮件到达时检查" => 设置你的条件,比如发件人是谁,主题是 ...

  2. Android LocalActivityManager的用法

    在开发中会碰到在一个activity中的局部(或者是activity的Fragment中)显示其他的activity 的内容,这时就用到了LocalActivityManager类. 假设这个容器是一 ...

  3. CSV 客座文章系列: Pruffi 通过 Windows Azure 挖掘社交媒体的强大招聘潜能

    编辑人员注释:今天这篇文章由 Pruffi 创始人 Alena Vladimirskaya 和 Pruffi 的 CTO Alexander Ivanov 联合撰写,介绍了该公司如何使用 Window ...

  4. SVN使用Tips

    1. 如果在本地删除了某个文件,在Cornerstone上的本地仓库会出现D的标志,并且文件不存在. 这时,只需要将该文件提交到服务器上,本地仓库就会清除了已删除的文件的标识,同时,服务器上也会自动删 ...

  5. php各类hash算法长度及性能

    Hash结果如下 <?php $data = "hello world"; foreach (hash_algos() as $v) { $r = hash($v, $dat ...

  6. IOS开发之xcode 快捷键

    IOS开发也有一年多了,发现Xcode快捷键,还不熟,恶补一下.要不然真影响工作效率,呵呵! 1. 文件 CMD + N: 新文件 CMD + SHIFT + N: 新项目 CMD + O: 打开 C ...

  7. Android的MVC框架

    http://www.cnblogs.com/wanghafan/archive/2012/07/20/2600786.html MVC是当前比较流行的框架,随便Google下,就可以发现几乎所有的应 ...

  8. Ubuntu启动、停止、重新启动MySQL,查看MySQL错误日志、中文编码错误

    1)启动: sudo /etc/init.d/mysql start 2)停止: sudo /etc/init.d/mysql stop 3)重新启动: sudo /etc/init.d/mysql ...

  9. SQL Server索引进阶:第十二级,创建,修改,删除

    在第十级中我们看到了索引的内部结构,在第十一级中我们看到了平衡树结构潜在的负面影响:索引碎片.有了索引内部结构的知识,我们可以检查在执行数据定义语句和数据操作语句的时候,都发生了什么.在本级中我们介绍 ...

  10. SQL 语句优化—— (一) 操作符优化

    1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以 ...