hdu-2141Can you find it?(二分搜索求和)
来源:互联网 发布:淘宝达人怎么玩 编辑:程序博客网 时间:2024/06/05 04:03
Can you find it?
Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others)Total Submission(s): 24425 Accepted Submission(s): 6186
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 31 2 31 2 31 2 331410
Sample Output
Case 1:NOYESNO
Author
wangye
Source
HDU 2007-11 Programming Contest
Recommend
威士忌
先把第一组和第二组所以加起来的可能性都保存起来 在从小到大排序 k=sum-c[i] 二分搜索能否找到k 找到即可以输出yes
#include<iostream>#include<string>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;int a[600],b[600],c[600],sum[360000];int n,m,l,s;int se(int num,int k){int l=k-1,r=0;int mid;while(l>=r){mid=(l+r)/2;if(sum[mid]==num)return 1;else if(sum[mid]>num)l=mid-1;else r=mid+1;}return 0;}int main(){int cnt=1;while(~scanf("%d%d%d",&l,&n,&m)){for(int i=0;i<l;i++)scanf("%d",&a[i]);for(int i=0;i<n;i++)scanf("%d",&b[i]);for(int i=0;i<m;i++)scanf("%d",&c[i]);int k=0;for(int i=0;i<l;i++){for(int j=0;j<n;j++){sum[k++]=a[i]+b[j];}}sort(sum,sum+k);scanf("%d", &s); printf("Case %d:\n", cnt++); int x; while(s--) { scanf("%d",&x); int f=0; for(int i=0;i<m&&f==0;i++) { int num=(x-c[i]); if(se(num,k)) { f=1; } } if(f)printf("YES\n"); else printf("NO\n"); }}return 0;}
1 0
- hdu-2141Can you find it?(二分搜索求和)
- HDOJ/HDU 2141 Can you find it? 二分搜索优化
- hdu 2141Can you find it?(二分搜索)
- hdu 2141 Can you find it? 二分
- HDU 2141 Can you find it?(二分)
- hdu 2141 Can you find it? 二分
- HDU 2141 Can you find it?【二分】
- 【HDU 2141】【二分】 Can you find it?
- HDU 2141 Can you find it? (二分)
- HDU-2141-Can you find it?【二分】
- HDU 2141 Can you find it?二分
- hdu 2141 Can you find it?(二分)
- hdu 2141 Can you find it?(二分)
- hdu 2141 Can you find it?(二分)
- HDU 2141 Can you find it? <二分>
- HDOJ 题目2141 Can you find it?(二分搜索)
- [ACM] hdu 2141 Can you find it? (二分查找)
- HDU 2141 Can you find it?(二分查找)
- hdu-2102A计划(两层地图 bfs或者dfs)
- 采药2(转载)
- PHP Ajax JavaScript 实现 无刷新附件上传
- 46. Permutations (has not been solved yet)
- 47. Permutations II (has not been solved yet)
- hdu-2141Can you find it?(二分搜索求和)
- 2016.08.14【初中部 NOIP提高组 】模拟赛C
- iOS_图片拉伸_imageResize_stretch
- JRE与JDK之间的关系
- JZOJ 4699 Password【NOIP2016提高A组模拟8.15】
- JSTL标签库学习总结
- C# winform程序怎么打包成安装项目(图解)
- 【NOIP2011模拟9.15】区间运算
- 注解方式实现AOP编程