HDOJ 2141 Can you find it?
2016-07-21 08:22
477 查看
Can you find it?
Problem DescriptionGive 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
题目大意:给出3个数组,问能否从3个数组中个找一个数,使得它们的和为X。
解题思路:利用数组sum存储a[i]与b[j]的和,然后对数组sum排序,二分搜索sum数组,找出满足sum[mid] == x - c[i]的mid,设置flag = true,打印输出即可。
代码如下:
#include <cstdio> #include <algorithm> typedef long long ll; using namespace std; const int maxl = 505; int la,lb,lc,a[maxl],b[maxl],c[maxl],sum[maxl * maxl]; int k; bool bs(int t) { int low,up,mid; low = 0,up = k - 1; while(low <= up){ mid = (low + up) / 2; if(sum[mid] > t) up = mid - 1; else if(sum[mid] < t) low = mid + 1; else return true; } return false; } int main() { int i,j,ncase = 0,s; while(scanf("%d %d %d",&la,&lb,&lc) != EOF){ for(i = 0;i < la;i++) scanf("%d",&a[i]); for(i = 0;i < lb;i++) scanf("%d",&b[i]); for(i = 0;i < lc;i++) scanf("%d",&c[i]); k = 0; for(i = 0;i < la;i++){ for(j = 0;j < lb;j++){ sum[k] = a[i] + b[j]; k++; } } sort(sum,sum + k); scanf("%d",&s); printf("Case %d:\n",++ncase); while(s--){ int x; scanf("%d",&x); bool flag = false; for(i = 0;i < lc;i++){ if(bs(x - c[i])){ flag = true; break; } } if(!flag) printf("NO\n"); else printf("YES\n"); } } return 0; }
相关文章推荐
- 2015 Multi-University Training Contest 6 Solutions
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- Sum Problem
- HDOJ 1009
- HDOJ 1001 递归方法
- HDOJ 1002 C语言版
- HDOJ 1003题解
- Big Number
- hdoj 2036 改革春风吹满地
- hdu 3076 ssworld VS DDD 概率dp
- hdu5007 ACM-ICPC 西安赛区网赛A题 水题
- hdu5011 西安邀请赛E题 Game 博弈论
- hdu5012 ACM-ICPC 西安赛区E题 Dice
- hdoj2029 Palindromes _easy version
- hdoj 2031 进制转换
- hdoj 2033 人见人爱
- hdoj 1874 畅通工程 vector邻接表测试
- 最小生成树——HDOJ 1233 还是畅通工程 解题报告
- 并查集——HDOJ 1213How Many Tables解题报告
- 最小生成树——HDOJ 2988 Dark roads解题报告