zoukankan      html  css  js  c++  java
  • hdu2141Can you find it?

    

    给你四个集合。要你从这四个集合中

    各取出一个数出来,推断,取出的前三个数的和

    是否等于第四个数。

    数据比較大。我的做法是将

    前两个集合全部数全部和的情况取出来,

    然后二分查找第四个集合和第三集合取出的数的差值。

    我比較懒。用了stl中的bsearch实现二分查找。

    代码例如以下:

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    int num_a,num_b,num_c,a[510],b[510],c[510],ab[250010];
    int cmp(const void *a,const void *b)
    {
    	return *(int *)a - *(int *)b;
    }
    void init()
    {
    	int num_x,x,*p,tmp;
    	for(int i=0;i<num_a;i++)
    		scanf("%d",&a[i]);
    	for(int i=0;i<num_b;i++)
    		scanf("%d",&b[i]);
    	for(int i=0;i<num_a;i++)
    		for(int j=0;j<num_b;j++)
    			ab[i*num_b+j]=a[i]+b[j];
    	for(int i=0;i<num_c;i++)
    		scanf("%d",&c[i]);
    	qsort(ab,num_a*num_b,sizeof(int),cmp);
    	scanf("%d",&num_x);
    	while(num_x--)
    	{
    		scanf("%d",&x);
    		for(int i=0;i<num_c;i++)
    		{
    			tmp=x-c[i];
    			p=(int*)bsearch(&tmp,ab,num_a*num_b,sizeof(int),cmp);
    			if(p!=NULL)
    			{
    				printf("YES
    ");
    				break;
    			}
    		}
    		if(p==NULL)
    			printf("NO
    ");
    	}
    }
    int main()
    {
    	int exp=0;
    	while(scanf("%d%d%d",&num_a,&num_b,&num_c)!=EOF)
    	{
    		printf("Case %d:
    ",++exp);
    		init();
    	}
    }

  • 相关阅读:
    第九周个人总结
    用户模板和用户场景
    windows 滚动截图单文件版
    vue一键复制实现 笔记
    django 配置mysql流程以及运行报错的解决
    django urls导入views报错
    python学习2
    python学习1
    spark学习第五天
    spark第四天
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6785824.html
Copyright © 2011-2022 走看看