• hdu 2141


    晕,这一题我是准备暴力的,但是这里给的数据有点大,那样是会TLE的,网上搜搜,无语啦,竟然可以这样来思考:合并前两个数组,然后再二分……

    #include "stdio.h"
    #include "stdlib.h"

    int li[505];
    int mi[505];
    int ni[505];
    int join[250005];

    int cmp(const void *a,const void *b)
    {
     int *c,*d;
     c=(int *)a;
     d=(int *)b;
     return *c-*d;
    }

    int main()
    {
     int l,m,n;
     int s;
     int count=1;
     int i,k,j,f,a,t;
     int start,end,mid;

     while(scanf("%d%d%d",&l,&m,&n)==3)
     {
      for(i=0;i<l;i++)
      {
       scanf("%d",&li[i]);
      }

      for(i=0;i<m;i++)
      {
       scanf("%d",&mi[i]);
      }

      for(i=0;i<n;i++)
      {
       scanf("%d",&ni[i]);
      }
      k=0;
      for(i=0;i<l;i++)
      {
       for(j=0;j<m;j++)
        join[k++]=li[i]+mi[j];
      }

      qsort(join,k,sizeof(int),cmp);
      qsort(ni,n,sizeof(int),cmp);
      
      printf("Case %d:\n",count++);
      scanf("%d",&s);
      for(i=0;i<s;i++)
      {
       scanf("%d",&a);
       t=0;
       for(j=0;j<n;j++)
       {
        f=0;
        start=0;end=k-1;
        mid=(start+end)/2;
        while(start<=end)
        {
         if(a-ni[j]>join[mid])
         {
          start=mid+1;
         }
         else if(a-ni[j]<join[mid])
         {
                            end=mid-1;
         }
         else
         {
          f=1;
          break;
         }
         mid=(start+end)/2;
        }
        if(f)
        {
         t=1;
         break;
        }
       }
       if(t)
       {
        printf("YES\n");
       }
       else
       {
        printf("NO\n");
       }
      }
     }

     return 0;
    }

  • 相关阅读:
    Python语法解析器PLY——lex and yacc in Python
    spider-lang :爬虫语言,专为网络爬虫设计
    使用ANTLR做一个简单的Python SQL语法解析器
    使用Antlr实现简单的DSL
    Wrights Notes
    20个人团建能干些什么?
    zz
    贾跃亭反思乐视节奏过快_公司频道_财新网
    西湖人才网 职称考评
    安能物流
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2358345.html
Copyright © 2020-2023  润新知