题目链接:

Can you find it?

Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others)
Total Submission(s): 38634    Accepted Submission(s): 9395

Problem Description
Give 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
 
Author
wangye
 
Source
 

题目大意:

多组数据输入

第一行是三个序列各自元素的个数

第2,3,4是三个序列

第4行是x的个数

下面的x行是多种情况的x值

分析:

三个序列三个数组,把前面两个数组组合为一个数组

比如1 2 3,1 2 3,这两个序列组合为一个数组‘

1+1,1+2,1+3,2+1,2+2,2+3,3+1,3+2,3+3,

计算一下就是

2,3,4,3,4,5,4,5,6,有重复的但是不用去掉,称这个序列为t

然后与第三个序列组合

1 ,2,3,(第三个序列)

然后将t序列升序排序,t与第三个序列组合的时候,t序列采用二分寻找数据

注意点:

1.不能采用set去重,不然会超内存(第一次遇到超内存,好激动啊啊啊啊啊)

2.对t序列不能采用for循环寻找数据,要采用排好序之后再二分查找数据,不然会超时

代码如下:

#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
int n1,n2,n3,n=;
while(~scanf("%d %d %d",&n1,&n2,&n3))
{
int a[n1],b[n2],c[n3];
for(int i=; i<n1; i++)
{
scanf("%d",&a[i]);
}
for(int j=; j<n2; j++)
{
scanf("%d",&b[j]);
}
for(int k=; k<n3; k++)
{
scanf("%d",&c[k]);
}
int xn;
int t[n1*n2];
scanf("%d",&xn);
int x[xn];
for(int i=; i<xn; i++)
{
scanf("%d",&x[i]);
}
int y=;
for(int i=; i<n1; i++)
{
for(int j=; j<n2; j++)
{
int z=a[i]+b[j];
t[y]=z;
y++;
}
}
sort(t,t+(n1*n2),cmp);
printf("Case %d:\n",n);
for(int i=; i<xn; i++)
{
int f=;
for(int k=;k<n3;k++)
{
int l=,h=n1*n2-;
while(l<=h)
{
int mid=(l+h)/; if(t[mid]==x[i]-c[k])
{
f=;
break;
}else if(t[mid]>x[i]-c[k])
{
h=mid-;
}else if(t[mid]<x[i]-c[k])
{
l=mid+;
}
}
if(f==)
break;
}
if(f==)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
n++;
}
return ;
}

哈哈哈哈哈哈哈哈哈哈

今天真的是超级开心

不准吐槽。。。。。

。。。。。。。。。。

HDU 2141 Can you find it? (二分)的更多相关文章

  1. HDU 2141 Can you find it? [二分]

    Can you find it? Give you three sequences of numbers A, B, C, then we give you a number X. Now you n ...

  2. C - 啥~ 渣渣也想找玩数字 HDU - 2141(有序序列枚举 + 二分优化查找)

    题目描述 可爱的演演又来了,这次他想问渣渣一题... 如果给你三个数列 A[],B[],C[],请问对于给定的数字 X,能否从这三个数列中各选一个,使得A[i]+B[j]+C[k]=X? 输入 多组数 ...

  3. hdu 2141 Can you find it?(二分查找)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141 题目大意:查找是否又满足条件的x值. 这里简单介绍一个小算法,二分查找. /* x^2+6*x- ...

  4. hdu 2141 (二分)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141 Can you find it? Time Limit: 10000/3000 MS (Java/O ...

  5. hdu 2141:Can you find it?(数据结构,二分查找)

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

  6. hdu 2141 Can you find it?(二分查找变例)

    Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now yo ...

  7. Can you find it? HDU - 2141 (二分查找)

    Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate ...

  8. HDU 2141 Can you find it?【二分查找是否存在ai+bj+ck=x】

    Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate ...

  9. Can you find it?(hdu 2141 二分查找)

    Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others ...

随机推荐

  1. Portal的安全代理(反向代理出口)配置架构

    对于正式运行的环境,一般需要设置网络安全控制区DMZ,通过代理,把仅需要的端口向客户端暴露,其他内部端口应该是在防火墙包含之内的. 下文将针对ArcGIS 的Portal软件,讲述在DMZ中如何架构的 ...

  2. 使用cancelBubble竟然可以阻止所有浏览器的冒泡?

    以前一直以为cancelBubble是IE8及以下的专属,今天做一个测试的时候意外发现了所有浏览器都支持,便提出来希望有哪位解释下. 1.使用原生js在FF下和chrome下两种方法都可以阻止冒泡 d ...

  3. javascript 关于new()继承的笔记

    近期的一些学习总结,如有错误不严谨地方,希望指正! 使用new操作符会有如下操作: 1.创建一个对象temp = {}, 2. temp.__proto__ = A.prototype, 3. A.c ...

  4. 搜索关键字自动更正 - Oracle Endeca Server

    做了几个Oracle Endeca 电商项目.每个项目都会有搜过关键字拼写错误更正(Spelling Correction)的需求.淘宝也有类似功能. Oracle Endeca Sever提供了关键 ...

  5. Oracle EBS AP 供应商取值

    SELECT --nvl(substr(po.vendor_name,1,instr(po.vendor_name,',',1)-1),po.vendor_name) vendor_name, po. ...

  6. MySQL上机实习报告(一)

    一.实习内容    利用wamp进行MySQL上机实习,建立数据库和一个学生信息表,并能对建的表进行数据插入.修改.查询和删除等内容. 二.实习目的 能将课堂上所学的内容运用到实际的上机操作中,进一步 ...

  7. RAC性能分析 - gc buffer busy acquire 等待事件

    概述---------------------gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer  busy分为gc buffer busy acquire和gc ...

  8. Linux装python3

     记住下载的软件最好装在/opt下默认的 大家都这样做 linux装python3.7我们以安装最新的来做测试 先下载关联的包防止出错 安装python前的库环境,非常重要yum install gc ...

  9. linux soft

    1.gdebi:可以使用gdebi来安装deb包,默认的deb安装使用的dpkg,dpkg 安装的缺点就是不解决包依赖关系 sudo apt-get install gdebi 当然也可以通过命令,使 ...

  10. SpringBoot+MyBatis连接数据库

    SpringBoot通过MyBatis连接数据库有2种方法: 1.注解 2.XML文件 1.注解 1.构建项目 2.添加依赖: <dependencies> <dependency& ...