HDU 2141 Can you find it? (二分)
题目链接:
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
题目大意:
多组数据输入
第一行是三个序列各自元素的个数
第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? (二分)的更多相关文章
- 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 ...
- C - 啥~ 渣渣也想找玩数字 HDU - 2141(有序序列枚举 + 二分优化查找)
题目描述 可爱的演演又来了,这次他想问渣渣一题... 如果给你三个数列 A[],B[],C[],请问对于给定的数字 X,能否从这三个数列中各选一个,使得A[i]+B[j]+C[k]=X? 输入 多组数 ...
- hdu 2141 Can you find it?(二分查找)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141 题目大意:查找是否又满足条件的x值. 这里简单介绍一个小算法,二分查找. /* x^2+6*x- ...
- hdu 2141 (二分)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2141 Can you find it? Time Limit: 10000/3000 MS (Java/O ...
- hdu 2141:Can you find it?(数据结构,二分查找)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- 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 ...
- 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 ...
- 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 ...
- Can you find it?(hdu 2141 二分查找)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
随机推荐
- Thymeleaf模板表达式
日期格式.组件提取等. ${#dates.format(date)}${#dates.arrayFormat(datesArray)}${#dates.listFormat(datesList)}${ ...
- html打造动画【系列3】- 小猫笑脸动画
猫咪容器 咱们每次画一个图片,肯定先要确定一个容器,几确定一下图形的位置和大小. <div class="mao_box"> <div class="m ...
- html打造动画【系列2】- 可爱的蛙蛙表情
先感受一下全部表情包: 在开始之前先安利一个知识点:Flex弹性布局 我们一般做水平三列布局都是用的float方法,将每一块浮动显示在同一行.这种方法会导致元素没有原来的高度属性,要用清除浮动来解决空 ...
- samba 使用tips
安装: 推荐使用新立德包管理器安装 SAMBA配置文件: /etc/samba/smb.conf Samba服务器的启动与关闭: sudo /etc/init.d/smbd start ubuntu访 ...
- Pwn With longjmp
前言 这个是 seccon-ctf-quals-2016 的一个题,利用方式还是挺特殊的记录一下. 题目链接 http://t.cn/RnfeHLv 正文 首先看看程序的安全措施 haclh@ubun ...
- idea springboot应用启动
在idea里启动springboot应用最好使用 spring-boot:run 如果通过运行main方法启动应用,会找不到页面
- ShowDoc
ShowDoc 摘自ShowDoc 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! 程序员都很希望别人能写技术 ...
- 记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26
记录今天客户的SQLSERVER启动不起来( 错误9003)的解决过程2013-11-26 今天一大早上班就接到客户的电话,说:SQLSERVER启动不起来,业务系统使用不了 于是我就使用QQ远程,帮 ...
- phantomJs页面操作
因为phantomjs能加载和操纵页面,它可以自动化地完美执行页面的各种操作. 操作文档: 脚本的被执行,就像它真的正在web 浏览器上运行一样. 下面的脚本,是读取元素id为myagent的文本内容 ...
- Mysql性能监控项及sql语句
推荐一款mysql监控软件MONyog 1.查询缓存: mysql> show variables like '%query_cache%'; 2.缓存在Cache中线程数量thread_cac ...