题目描述 可爱的演演又来了,这次他想问渣渣一题。。。 如果给你三个数列 A[],B[],C[],请问对于给定的数字

X,能否从这三个数列中各选一个,使得A[i]+B[j]+C[k]=X?

输入 多组数据,你应处理到 EOF。 每组数据的第一行是三个数 L, M, N,分别代表数列 A[],B[],C[]

的长度,接下来三行,每行分别是L, M, N 个数,分别代表数列 A[], B[], C[]。

接下来一行包含一个数S,代表有S组询问。之后的S行每行一个数,代表这组询问的 X。 1<=L, N, M<=500, 1<=S<=1000

; 所有的数都在 32 位整数范围内。

输出 首先对于每组数据输出一行“Case T: ”,T代表数据组数。然后每行对应一组询问,如果能够找到一组满足题目所述条件,输出

YES,否则输出 NO。

样例输入
3 3 3
1 2 3
1 2 3
1 2 3
3
1
4
10 样例输出
Case 1:
NO
YES
NO

思路

  • [ ] 题意:给我们三个序列A[] B[] C[ ]长度长度分别是 a,b,c, 问能否在这三个序列中分别找一个数,使它的和相加等于定值x
  • [ ] 分析:这一题两层for循环一定会炸,所以我们要想办法去优化---->请看代码注释

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; const int mxn = 505; int main()
{
/* freopen("A.txt","r",stdin); */
int m, n, k;
int a[mxn], b[mxn], c[mxn], d[mxn * mxn];
int Case = 0;
while(scanf("%d %d %d", &m, &n, &k) != EOF)
{
for(int i = 1; i <= m; i ++)
scanf("%d", &a[i]);
for(int i = 1; i <= n; i ++)
scanf("%d", &b[i]);
for(int i = 1; i <= k; i ++)
scanf("%d", &c[i]);
int cnt = 0;
//统计出来所有a、b序列元素相加可能的和
for(int i = 1; i <= m; i ++)
for(int j = 1; j <= n; j ++)
d[cnt ++] = a[i] + b[j];
sort(d, d + cnt); int q, x;
scanf("%d", &q);
printf("Case %d:\n", ++ Case);
while(q --)
{
scanf("%d", &x);
int flag = 0;
for(int i = 1; i <= k; i ++)
{
int l = 0, r = cnt - 1, mid;
//二分去在c中查找某个值使 c[i] + d[mid]== x
while(l <= r)
{
mid = (l + r) >> 1;
if(c[i] + d[mid] == x)
{
flag = 1; break;
}
else if(c[i] + d[mid] < x)
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
if(flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}

最新文章

  1. 转:如何向妻子解释OOD
  2. N 皇后问题
  3. Urlencode and Urldecode 命令行
  4. Open Xml SDK Word模板开发最佳实践(Best Practice)
  5. 一些需要注意的C知识点
  6. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
  7. # Android动画笔记
  8. WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)
  9. TFboy养成记 简单小程序(Variable &amp; placeholder)
  10. Shell 命令替换
  11. C#复习笔记(4)--C#3:革新写代码的方式(查询表达式和LINQ to object(下))
  12. Apache的commons工具类
  13. SQL Server For XML
  14. 理解TIME_WAIT
  15. linux erase
  16. PuTTY+Xming实现X11的ssh转发
  17. 流媒体技术学习笔记之(三)Nginx-Rtmp-Module统计某频道在线观看流的客户数
  18. linux中的各种$号 位置参数变量
  19. Linux用户信息查询
  20. 用json在java和C#之间传递base64的问题。。。

热门文章

  1. 支持IE6、IE7、IE8等低端浏览器的简化版vue
  2. TensorFlow Serving实现多模型部署以及不同版本模型的调用
  3. Web 认证配置流程
  4. java多线程基础API
  5. ASP.NET Core身份认证服务框架IdentityServer4 介绍
  6. arm 添加 ftp server 之 bftpd
  7. 5W随想
  8. 03-Vue数据请求
  9. 在Centos系统中基于PowerDNS实现master和slave的域名解析服务双备份
  10. iOS 指纹认证登陆开发(TouchID)