题目大意:输入三系列数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. 第五章 Spring3.0 、Hibernate3.3与Struts2的整合

    5.1整合Spring与Hibernate 5.1.1使用MyEclipse加入Spring与Hibernate功能 使用MyEclipse工具主要是为了让工程拥有把数据表生成实体类与映射的功能.然后 ...

  2. logrotate 日志清理后 rsyslog中断问题

    <pre name="code" class="html">随后配置logrotate的配置文件/etc/logrotate.conf,加入下面的内 ...

  3. 简单实现计算Edit Distance算法

    最近因为工作需要,学习了NLP的相关知识,简单动手实现了一下计算Edit Distance的算法,就是计算一个字符串要变成另一个字符串需要的代价,这其中采用Levenshtein方式,即规定一个插入和 ...

  4. qemu 调试(二)

    我见过最全的剖析QEMU原理的文章 qemu代码分析 qemu中ELF文件的加载 几个关键点,可以设计断点,观察. $ cat command.gdbset breakpoint pending on ...

  5. 三点顺序_nyoj_68(计算几何).java

    三点顺序 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3   描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的 ...

  6. SRM 584 div2

    早早地水完了三道题,pt1000用的是dfs,开始做的时候误认为复杂度最多就O(2^25),结果被一组O(2*3^16)的数据接近1e8给cha了.继续努力. pt250:求两个串的前缀组成的不同串数 ...

  7. 达内TTS6.0课件oop_day02

  8. 怎样在UICollectionView中添加Header和footer

    ---恢复内容开始--- 怎样在UICollectionView中添加Header和footer 转载于http://my.oschina.net/zboy/blog/221525 摘要 来自-htt ...

  9. python打包成exe

    目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...

  10. hadoop笔记之hdfs

    1.HDFS设计基础与目标 1.HDFS设计基础与目标 (1)硬件错误是常态,因此需要冗余. (2)流式数据访问.即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理. (3)大规 ...