- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hdu2141Canyoufindit排序二分查找
Hdu2141 Can you find it?解题报告
/*
Name: hdu2141解题报告
Copyright: ecjtu_acm训练基地
Author: yimao
Date: 03-08-10 19:17
Description: 数据关系处理+排序+二分查找
*/
一、题目
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
二、题目大意及分析
给定三个数组a,b,c,每个数组有若干个数(=500个),再给定一个数s要你判断是否存在s=a[i]+b[j]+c[k],存在一组数就输出YES,一组都不存在就输出NO。
因为只有三个500大小的数组,刚开始我直接写了三个for循环,超时,再看看题目就更清楚了,每组测试数据中给的s是=1000个,这就很容易超时,而且,给的数可以是负数,这样即使是我用了sort全部排序,也无济于事。
无奈之下直接百度,才发现已经AC的人都先把a数组和b数组中的数相加成一个ab[500×500]的数组,这样就相当于ab[i]+c[j]=s;再变形一下,ab[i]=c[j]+s;这样我就知道接下来要干什么了,只要在ab数组里用以前学的二分查找看能否把c[j]+s找出来,貌似以前也有过这类要把数据关系进行转换的题。
直接写代码就顺风顺水了。
三、部分代码及相关分析
int find(int l,int r,int s) //二分查找,必记;
{
while(l=r)
{
int mid=(l+r)1;
if(ab[mid]==s) return 1;
if(ab[mid]s) r=mid-1;
else l=mid+1;
}
return 0;
}
再附上一部分写了很久的源代码:
for(i=1;i=Q;i++)
{
scanf(%d,s);
flag=0;
for(j=1;j=lc;j++) //开始这里写i WA了好久;
{
temp=s-c[j]; //开始用s出错,应用一个temp; 这里也写过一个c[i]错的久,,//这阵子似乎写代码一直感觉不好。。。
if(find(1,lab,temp)) { flag=1; break; }
}
3
您可能关注的文档
最近下载
- 光电信息科学与工程专业英语教程(第2版)全套完整教学课件.pptx
- 思想政治教育融入大学公共体育课教学研究.docx VIP
- 2025年杭州青少年活动中心公开招聘工作人员2人笔试参考题库附答案解析.docx VIP
- 留学高中成绩单模板.docx VIP
- 2025年陕教版(2024)小学信息技术三年级上册(全册)教学设计(表格版 附目录p75).docx VIP
- 2024北京西城初三(上)期末语文试卷及答案.pdf VIP
- 2.Windos习题及答案.doc VIP
- 【小学心理健康教育】我的情绪小怪兽 课件.pptx VIP
- 第4课《公民的基本权利和义务》第2课时公民的基本义务 核心素养教案 道德与法治六年级上册.pdf VIP
- 2025年高级人工智能训练师(三级)理论考试题库资料_含答案.pdf VIP
文档评论(0)