HDU 2141 Can you find it?
2014-09-23 22:28
351 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2141
使用二分优化时间复杂度 将a+b的和存在一个250000的数组里。
http://acm.hdu.edu.cn/showproblem.php?pid=2141
使用二分优化时间复杂度 将a+b的和存在一个250000的数组里。
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; int L,N,M,a[510],b[510],c[510],sum[250010],S,num; bool check(int x){ for(int i=1; i<=M; i++){ int key = x - c[i]; int l = 0, r = num - 1; while(l <= r){ int mid = (l + r) >> 1; if(sum[mid] > key) r = mid - 1; else if(sum[mid] < key) l = mid + 1; else return true; } } return false; } int main(){ // freopen("in.txt", "r", stdin); int t = 0; while(scanf("%d%d%d",&L,&N,&M) == 3){ t++; for(int i=1; i<=L; i++) scanf("%d",&a[i]); for(int i=1; i<=N; i++) scanf("%d",&b[i]); for(int i=1; i<=M; i++) scanf("%d",&c[i]); num = 0; for(int i=1; i<=L; i++){ for(int j=1; j<=N; j++){ sum[num++] = a[i] + b[j]; } } sort(sum, sum+num); scanf("%d",&S); cout << "Case " << t << ":" << endl;//一直没看到有这个WA了好几次 int x; for(int i=1; i<=S; i++){ scanf("%d",&x); if(check(x)) puts("YES"); else puts("NO"); } } return 0; // int i; // float j; // scanf("%d%f",&i,&j); // printf("%d %f",i,j); }
相关文章推荐
- hdu 2141 Can you find it? && hdu1597 find the nth digit
- hdu 2141 Can you find it? 二分查找
- hdu 2141 Can you find it?
- HDOJ/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 1597 find the nth digit && HDU 2141 Can you find it?
- hdu 2141 Can you find it? 二分
- hdu 2141 Can you find it ?
- [ACM] 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?