A
来源:互联网 发布:rundll32调用js 编辑:程序博客网 时间:2024/05/22 11:29
这题用二分做很水,关键是求两个数组的之和,求和完后排序,然和剩下那个数组枚举,两个数组二分就可以了。
#include<iostream>#include<string.h>#include<string>#include<stack>#include<queue>#include<functional>#include<set>#include<map>#include<stdlib.h>#include<vector>#include<math.h>#include <algorithm>#pragma warning(disable:4996)using namespace std;int a[510];int b[510];int c[510];int d[1010];int sum[1000000];int l,n,m,t=1;int find(int sum[],int q,int k){int lo = 0, r = q - 1,mid;while (lo <= r){mid = ((r - lo) >> 1) + lo;if (sum[mid] == k)return mid;else if(k>sum[mid])lo = mid+1;elser = mid-1;}return 0;}int main(){while (~scanf("%d %d %d", &l, &n, &m)){int s,flag,cnt=0,i,j;memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));for ( i = 0; i < l; i++)scanf("%d", &a[i]);for ( i = 0; i < n; i++)scanf("%d", &b[i]);for ( i = 0; i < m; i++)scanf("%d", &c[i]);for ( i = 0; i < l; i++)for ( j = 0; j < n; j++)sum[cnt++] = a[i] + b[j];sort(sum, sum +cnt);scanf("%d", &s);printf("Case %d:\n", t++);while(s--){int x;scanf("%d", &x);flag = 0;for ( i = 0; i < m; i++){int f = x - c[i];if (find(sum, cnt, f)){printf("YES\n");break;}}if (i>=m)printf("NO\n");}}return 0;}
阅读全文
0 0
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- a
- A
- A*
- a
- A
- a
- 【codevs 1082】线段树练习三(区间修改+区间和)
- opencv的 threshold
- HDU6130-Kolakoski
- SSDB 安装部署及注意事项总结
- 股票操作记录2017-8-16盘中总结
- A
- Dom4j解析xml
- CSU 1803: 2016
- 获取本地ip地址
- c++ 变量不要定义在.h 头文件当中(main already defined in *.obj 解决方法)
- Java NIO框架Netty教程(二) – 白话概念
- JavaScript中click()事件失效
- hdu4946(凸包)
- oracle 重建scott的方法