zoukankan      html  css  js  c++  java
  • hdu 2141 二分搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=2141

    /*在排序后的序列中搜索某个确定的值*/

    题目大意:在序列a,b,c中分别找一个值,满足a[i]+b[j]+c[k]=X;

    先将a,b合并为ab,然后用二分搜索在数组ab中查找X-c[k];

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define Max 505
    using namespace std;
    int ab[Max*Max],a[Max],b[Max],c[Max];
    int L,M,N,S,X,K;
    int cmp(const void* a,const void* b)
    {
    	return *(int*)a-*(int*)b;
    }
    int search(int p)    //二分搜索
    {
    	int first=0,last=K-1,middle;
    	while(first<=last){
    		middle=(last+first)/2;
    		if(ab[middle]==p)
    			return 1;
    		else if(ab[middle]<p)
    			first=middle+1;
    		else
    			last=middle-1;
    	}
    	return 0;
    }
    int main()
    {
    	int i,j,flag=0;
    	while(scanf("%d%d%d",&L,&M,&N)!=EOF){
    		for(i=0;i<L;i++)scanf("%d",&a[i]);
    		for(i=0;i<M;i++)scanf("%d",&b[i]);
    		for(i=0;i<N;i++)scanf("%d",&c[i]);
    		for(i=0,K=0;i<L;i++){
    			for(j=0;j<M;j++){
    				ab[K++]=a[i]+b[j];
    			}
    		}
    		qsort(ab,K,sizeof(ab[0]),cmp);
    		qsort(c,N,sizeof(c[0]),cmp);
    		scanf("%d",&S);
    		printf("Case %d:\n",++flag);
    		for(i=0;i<S;i++){
    			scanf("%d",&X);
    			for(j=0;j<N;j++){
    				if(search(X-c[j])){
    					printf("YES\n");
    					break;
    				}
    			}
    			if(j==N)
    				printf("NO\n");
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    关于可控进程数的PHP多进程以及信号控制
    编译安装PHP遇到的问题
    MySQL数据的导入导出
    关于svn的dump和load命令
    Nginx多域名的泛解析
    kafka
    JavaScript
    失误与经验
    Hadoop
    Storm
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3034600.html
Copyright © 2011-2022 走看看