HDU 2141 Can you find it?
来源:互联网 发布:c语言编辑 编辑:程序博客网 时间:2024/06/06 13:13
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);}
0 0
- HDU/HDOJ 2141 Can you find it?
- hdu 2141 can you find it?
- HDU-2141 can you find it?
- hdu 2141 Can you find it?
- Can you find it? hdu 2141
- HDU 2141 Can you find it?
- hdu 2141 Can you find it ?
- hdu(2141) Can you find it?
- Can you find it?(hdu 2141)
- 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? 二分
- java高新技术:泛型
- IntelliJ IDEA 13使用指南
- 记录一下学习的心路历程
- mysql存储emoji表情
- 【转】android UI 相关常用类简介
- HDU 2141 Can you find it?
- Trie树:应用于统计和排序
- struts1 demo
- SSRS--分页技术篇
- J2EE规范
- C 语言书籍推荐
- 32位和64位操作系统的区别作用
- C++学习笔记(第七章 自定义数据类型 枚举 之一)
- 反射