E - Can you find it?

0人阅读 评论(0) 收藏 举报
分类:
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. 
InputThere 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. 
OutputFor 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

思路:正常遍历肯定爆了,涉及到四层循环。暴力时间严重超时。
可以采用空间换时间的做法,先两层循环计算L,N的数据保存成新数组,再用二分法进行遍历。

#include<cstdio>
#include<iostream>
#include <string>
#include<algorithm>
#include<map>
#include<set>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;

 
int main(void) {
	int L,N,M,S;
	int LL[501],NN[501],MM[501];
	long long LLNN[501*501];
	int SS[1001];
	int begin,end,mid;
	long long sum;
	bool check =false;
	int ex = 1;
	//freopen("main.txt", "r",stdin);
	 while(~scanf("%d%d%d", &L, &N, &M)) {
	 		printf("Case %d:\n", ex++);
	 	for(int i = 0; i < L; i++) {
	 		scanf("%d", &LL[i]);
		 }
		for(int i = 0; i < N; i++) {
	 		scanf("%d", &NN[i]);
		 }
	 	for(int i = 0; i < M; i++) {
	 		scanf("%d", &MM[i]);
		 }
		 sort(MM, MM+M);
		 int p = 0;
		 for(int i = 0; i < L; i++) {
		 	for(int j = 0; j < N; j++ ) {
		 		LLNN[p++] = LL[i] + NN[j];
			 }
		 }
		 sort(LLNN, LLNN + p);
//		for(int i = 0; i < p; i++) {
//			printf("%d ", LLNN[i]);
//		
//		}
//		printf("\n");
		 scanf("%d", &S);
		 for(int i = 0; i < S; i++) {
		 	scanf("%d", &SS[i]);
		 }
		
		for(int ii = 0; ii < S; ii++) {
		 	check = false;
			for(int i = 0; i < M; i++) {
		 	 		begin = 0; 
		 	 		end = p - 1;
		 	 		while(begin <= end) {
		 	 			mid = (begin + end) / 2;
		 	 		//	printf("mid%d\n", mid);
					//	  printf("LLNN %d MM[i] %d sum %d\n",LLNN[mid], MM[i], LLNN[mid] + MM[i]);	
						if(LLNN[mid] + MM[i] == SS[ii]) {	
		 	 				check = true;
		 	 				break;
						}else if(LLNN[mid] + MM[i] > SS[ii]) {
							end = mid - 1;
						}else {
							begin = mid + 1;
						}
		 			}
				if(check) {
					break;
				}	
		 	}
		 	if(check) {
		 		printf("YES\n");
			 }else {
			 	printf("NO\n");
			 }
		}
	 
	} 
	return 0;
}





查看评论

Error: Can't find Python executable "python", you can set the PYTHON env variable.解决办法

错误原因:Node.js 在安装模块的时候报错,缺少python环境。解决办法 运行下面代码:npm install --global --production windows-build-tools...
  • weixin_36222137
  • weixin_36222137
  • 2017-11-07 00:39:10
  • 2717

ERR! configure error gyp ERR! stack Error: Can't find Python executable "python"

Node.js 在安装模块的时候报错,缺少python环境。 ERR! configure error gyp ERR! stack Error: Can't find Python execu...
  • tt361
  • tt361
  • 2015-11-06 12:50:03
  • 10869

那年,我们走过的安卓开发中的那些坑(19:23:50 Generate Signed APK: Errors while building APK. You can find the errors )

开发过程中,总会遇到很多坑: Gradle build finished with 101 error(s) in 1m 35s 424ms 19:23:50 Generate Signed AP...
  • daojian5173
  • daojian5173
  • 2017-04-02 13:11:47
  • 5574

HDU——2141 Can you find it?

Can you find it? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/10000 K (Java/Others...
  • wuxiushu
  • wuxiushu
  • 2015-09-01 11:16:05
  • 594

Errors while building APK. You can find the errors in the 'Messages' view

generate signed apk上面那个错误就是密码或者别名错误
  • qq_21727627
  • qq_21727627
  • 2017-02-16 11:27:49
  • 338

CodeForces 702B Powers of Two(二分)

B. Powers of Two You are given n integers a1, a2, ..., an. Find the number of pairs of indexes...
  • qq_26658823
  • qq_26658823
  • 2016-08-02 21:32:15
  • 283

Errors while building APK. You can find the errors in the 'Messages' view.

最近在用android studio打包签名apk时遇到了一个问题,经过查找资料,顺利解决。问题一:Messages报错如下:Error:Execution failed for task ':app...
  • limonzet
  • limonzet
  • 2016-04-30 09:51:12
  • 20939

hdu 2266 How Many Equations Can You Find

How Many Equations Can You Find Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768...
  • wust_ZJX
  • wust_ZJX
  • 2015-07-06 13:42:49
  • 838

HDU2141:Can you find it?(二分)

Problem Description Give you three sequences of numbers A, B, C, then we give you a number X. Now y...
  • libin56842
  • libin56842
  • 2013-11-24 14:41:35
  • 3359

Generate Signed APK: Errors while building APK. wear:packageRelease FAILED

9:57:44 Executing tasks: [:wear:assembleRelease] 9:57:56 Gradle build finished with 1 error(s) in 11...
  • Rodulf
  • Rodulf
  • 2016-02-14 10:08:10
  • 7805
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1万+
    积分: 1838
    排名: 2万+
    博客专栏
    acm

    文章:10篇

    阅读:458
    最新评论