hdu 2141 Can you find it? 二分
2015-07-19 15:59
267 查看
Can you find it?
Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others)Total Submission(s): 15781 Accepted Submission(s): 4034
Problem Description
Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which satisfy the formula Ai+Bj+Ck = X.
Input
There are many cases. Every data case is described as followed: In the first line there are three integers L, N, M, in the second line there are L integers represent the sequence A, in the third line there are N integers represent the sequences B, in the forth
line there are M integers represent the sequence C. In the fifth line there is an integer S represents there are S integers X to be calculated. 1<=L, N, M<=500, 1<=S<=1000. all the integers are 32-integers.
Output
For each case, firstly you have to print the case number as the form "Case d:", then for the S queries, you calculate if the formula can be satisfied or not. If satisfied, you print "YES", otherwise print "NO".
Sample Input
3 3 3 1 2 3 1 2 3 1 2 3 3 1 4 10
Sample Output
Case 1: NO YES NO
Author
wangye
二分,枚举其中一个,再枚举其他两个的和
#include <iostream> #include <algorithm> using namespace std; int l,n,m; long long a[555],b[555],c[555]; long long d[555*555]; int main() { int _case=0; while(cin>>l) { cout<<"Case "<<++_case<<":"<<endl; cin>>n>>m; for(int i=1;i<=l;i++) { cin>>a[i]; } for(int i=1;i<=n;i++) { cin>>b[i]; } for(int i=1;i<=m;i++) { cin>>c[i]; } int top=0; for(int i=1;i<=l;i++) { for(int j=1;j<=n;j++) { d[++top]=a[i]+b[j]; } } sort(d+1,d+top+1); sort(c+1,c+m+1); int s; cin>>s; while(s--) { int ss; cin>>ss; int sumi=0,sumj=0; if(d[1]+c[1]>ss||c[m]+d[top]<ss) { cout<<"NO"<<endl; continue; } int flag=0; for(int i=1;i<=m;i++) { int p=ss-c[i]; int l=1,r=top,mid=(r+l)/2; while(l<=r) { if(d[mid]>p) { r=mid-1; mid=(r+l)/2; } else if(d[mid]<p) { l=mid+1; mid=(r+l)/2; } else { flag=1; break; } } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0; }
相关文章推荐
- CAS
- Swap Nodes in Pairs
- 算法总结——spfa(使用优先队列的Bellman_Ford算法)
- Struts2乱码问题的解决办法
- Ubuntu输入密码登陆后又跳回到登录界面
- JavaScript--DOM修改元素的属性
- 黑马程序员——Java反射&动态代理
- 龙贝格算法
- 关于ListView中ViewHolder修饰符的问题
- Ubuntu 14.10 下Hadoop HttpFS 配置
- 菜鸟学习OpenCV(Python)碰到的一些小问题
- stack smashing detected报错
- LeetCode#189 Rotate Array
- [LeetCode] Find Minimum in Rotated Sorted Array
- Tomcat监控xml ,当修改xml后,不用重启tomcat
- 多态的覆盖(重写)
- java中的复制文件
- 收集的网址
- CNN卷积神经网络
- python题目2