`
lgh1992314
  • 浏览: 315580 次
文章分类
社区版块
存档分类
最新评论

hdoj_2141

 
阅读更多

Can you find it?

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


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[i]+b[j],wa。也算是个小小的优化吧
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main()
{
	freopen("in.txt","r",stdin);
	int a[505],b[505],c[505],sum[250050];
	int l,n,m,s,i,x,j;
	int ans = 0;
	int cnt = 1;
	int k = 0;
	while(scanf("%d %d %d",&l,&n,&m)!=EOF)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		memset(sum,0,sizeof(sum));
		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]);
		k = 0;
		for(i=0;i<l;i++)
		{
			for(j=0;j<n;j++)
			{
				sum[k++] = a[i] + b[j];
			}
		}
		sort(sum,sum+k);
		sort(c,c+m);
		scanf("%d",&s);
		printf("Case %d:\n",cnt++);
		while(s--)
		{
			ans = 0;
			scanf("%d",&x);
			for(i=0;i<m;i++)
			{
				int left = 0;
				int right = l * n - 1;
				while(left<=right)
				{
					int mid = (left + right) / 2;
					if(sum[mid] + c[i] > x)
					{
						right = mid - 1;
					}
					else if(sum[mid] + c[i] < x)
					{
						left = mid + 1;
					}
					else 
					{
						printf("YES\n");
						ans = 1;
						break;
					}
				}
				if(ans==1) break;
			}
			if(ans==0) printf("NO\n");
		}
	}
	return 0;
}


分享到:
评论

相关推荐

    hdoj.rar_Dividing HDOJ_OJ 1082_hdoj 10_杭电oj_杭电oj1000

    【标题】"hdoj.rar_Dividing HDOJ_OJ 1082_hdoj 10_杭电oj_杭电oj1000" 涉及的知识点主要围绕着“杭电在线判题系统(HDOJ)”以及其中的题目1082和10系列题目。HDOJ是杭州电子科技大学主办的一个在线编程竞赛平台,...

    hdoj.rar_HDOJ _OJ_oj_如何卡oj

    【标题】"hdoj.rar_HDOJ _OJ_oj_如何卡oj" 提供的信息主要涉及到两个关键概念:HDOJ(杭州电子科技大学在线评测系统)和OJ(Online Judge),以及“如何卡oj”的技巧。首先,让我们详细了解这两个核心概念。 OJ(On...

    HDOJ.zip_HDOJ _Mine!_algorithm_stepped8pp

    标题中的“HDOJ.zip_HDOJ _Mine!_algorithm_stepped8pp”指的是一个压缩文件,其中包含的主要是与“HDOJ”(Happy Dog Online Judge)平台相关的代码,特别是作者自己的解决算法。"Mine!"可能表示这些代码是个人的...

    OJ.tar.gz_HDOJ _OJ源码_oj

    【OJ.tar.gz_HDOJ _OJ源码_oj】是一个包含编程竞赛平台HDOJ(Happy Ding Octopus Judge)部分源代码的压缩文件。这个压缩包的主要目的是供学习和研究使用,尤其是针对50至60题目的解题算法和系统实现。通过分析这些...

    hdu4405_HDOJ_ACM_

    【标题】"hdu4405_HDOJ_ACM_" 指的是在杭州电子科技大学(HDU)的在线判题系统(Online Judge,简称OJ)上的一道编程竞赛题目,它属于HDOJ ACM系列。这个系列通常与国际大学生程序设计竞赛(ACM/ICPC)相关,这类...

    HDOJ_1480 钥匙计数之二 解题报告.mht

    HDOJ_1480 钥匙计数之二 解题报告.mhtHDOJ_1480 钥匙计数之二 解题报告.mht

    HDOJ_1010 Tempter of the Bone

    【HDOJ_1010 诱惑者的骨头】是一道经典的图论问题,主要考察的是在特定时间约束下寻找图中的路径。题目要求我们判断在一个给定的环境中是否存在一条从入口到出口的可行路径。这涉及到图的遍历算法,如深度优先搜索...

    HDOJ.rar_HD_HDOJ

    【标题】"HDOJ.rar_HD_HDOJ" 是一个与HDU(杭州电子科技大学)在线判题系统HDOJ相关的压缩包文件,其中包含了大量编程题目的源代码。 【描述】提到,这个压缩包包含了几百道HDOJ题目的源代码,这意味着它是一个宝贵...

    HDOJ_my_answer

    【标题】"HDOJ_my_answer" 指的可能是你在参与某次编程挑战或学习过程中,为解决High-Dimensional Online Judge(HDOJ)上的问题而编写的个人解答集。这个压缩包很可能是你存储自己对HDOJ题目答案的一个项目文件,...

    HDU.rar_hdoj 2000 2999 chm_hdoj 2000-2099_hdu_hdu acm 20_杭电ACM

    “HDOJ”通常指的是杭电的在线判题系统,是众多ACMer进行算法训练和比赛的重要平台。在这个平台上,题目编号通常从1000开始,按照顺序递增。本压缩包聚焦于2000到2099的题目,这些题目涵盖了基础到进阶的各种算法...

    杭电acm 实习课件

    首先,课件中提到了一个非常基础的题目——HDOJ_1089,这是一个简单的加法问题。初学者常见的错误写法是只考虑了两个数的输入和输出,忽略了可能存在的多组数据。正确的处理方式是使用循环结构,例如C语言中的`while...

    HDOJ题目分类 HDOJ题目分类

    【标题】:“HDOJ题目分类 HDOJ题目分类” HDOJ,全称为Happy DingO Online Judge,是一个在线编程竞赛平台,它为参赛者提供了大量编程题目进行练习和比赛,旨在提升编程技能和算法理解。HDOJ的题目分类是帮助用户...

    How_to_Use_HDOJ

    搞acm的没有谁不知道杭电题库,但是杭电上的OJ到底该怎么用,对于某些初学者确实一个难题,所以How_to_Use_HDOJ.rar应运而生

    (lecture_02)简单数学题

    **位运算优化**:如HDOJ_1061题,对于求解大数的末尾几位,可以利用位运算的性质进行优化,避免直接计算大数乘法导致的时间复杂度过高。\n\n4. **指数模运算**:在HDOJ_2035题中,要求求解A的B次方最后三位数。可以...

    acm课件2 简单数学题

    HDOJ_1108题给出了这样的例子,要求计算两个数的LCM。通常,我们可以通过先计算最大公约数(GCD)再利用公式`LCM = 数1 * 数2 / GCD`来求解。课件中提到了欧几里得算法来计算GCD,它基于两个数相除的余数不断迭代,...

    (lecture_02)简单数学题090223.ppt

    HDOJ_1108题目的目标是计算两个正整数的最小公倍数(LCM)。求解最小公倍数通常可以通过先计算它们的最大公约数(GCD)来实现,因为两个数的乘积除以它们的最大公约数即为最小公倍数。PPT中提到了欧几里得算法...

    HDOJ部分简单题(JAVA)

    HDOJ1000.java HDOJ1001.java HDOJ1089.java HDOJ1090.java HDOJ1091.java HDOJ1092.java HDOJ1093.java HDOJ1094.java HDOJ1095.java HDOJ1108.java HDOJ1406.java HDOJ2001.java HDOJ2002.java HDOJ2003.java HDOJ...

    HDOJ.zip_hduoj100题

    【HDOJ.zip_hduoj100题】是一个压缩包文件,包含了HDUOJ(杭州电子科技大学在线评测系统)的约100道编程练习题目及其源代码。这个资源对于想要提升编程技能,尤其是对算法和数据结构有深入学习需求的程序员来说,是...

    HDOJ 80题 Java

    【标题】"HDOJ 80题 Java"是一份专为Java程序员设计的在线编程挑战集合,源自杭州电子科技大学(HDOJ)的在线评测系统。这些题目旨在帮助Java开发者提升算法理解与编程能力,同时也为那些习惯于C++但希望在Java环境...

    hdoj1001标程

    hdoj1001标程

Global site tag (gtag.js) - Google Analytics