hdu(2141) Can you find it?
来源:互联网 发布:雷欧奥特曼mac装备 编辑:程序博客网 时间:2024/06/05 22:45
本题要用二分查找的方法来做;
很好的一道二分+降维思想的题!
先把前两个数组加起来,存在map中在排序;
然后二分查找t-c[i],看是否存在;;
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int a[600],b[600],c[600];
int map[300000],n,m,k;
int cmp(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int find (int min,int max,int sum)
{
int mid;
while(min<=max)
{
mid=(min+max)/2;
if(map[mid]==sum)
return 1;
else if(map[mid]<sum)
{
min=mid+1;
}
else
max=mid-1;
}
return 0;
}
int main()
{
int i,j,h,t,p,r=1;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<m;j++)
scanf("%d",&b[j]);
for(h=0;h<k;h++)
scanf("%d",&c[h]);
int ii=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
map[ii++]=a[i]+b[j];
qsort(map,ii,sizeof(map[0]),cmp);
scanf("%d",&p);
printf("Case %d:\n",r++);
while(p--)
{
scanf("%d",&t);
int flag=0;
for(i=0;i<h;i++)
{
if(find(0,ii-1,t-c[i]))
flag=1;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
- HDU/HDOJ 2141 Can you find it?
- hdu 2141 can you find it?
- HDU-2141 can you find it?
- hdu 2141 Can you find it?
- Can you find it? hdu 2141
- HDU 2141 Can you find it?
- hdu 2141 Can you find it ?
- hdu(2141) Can you find it?
- Can you find it?(hdu 2141)
- hdu 2141 Can you find it?
- HDU 2141 Can you find it?
- HDU - 2141 Can you find it?
- hdu 2141 Can you find it? 二分
- HDU 2141 Can you find it?
- HDU - 2141 Can you find it?
- hdu 2141 can you find it?
- HDU 2141 Can you find it?(二分)
- hdu 2141 Can you find it? 二分
- 在eclipse的中添加外部javadoc.jar包
- redis学习笔记八之主从复制
- 比较两个文本不同的行/比较两个文本相同的行
- robotium产生junit形式的报告
- vc++ 绘图的闪烁问题
- hdu(2141) Can you find it?
- redis学习笔记九之虚拟内存
- C++为什么是C++而不是++C
- 关于自动化元素抽取
- Google App Engine 添加JSP文件后上传报JDK错误的解决办法
- HDU 1011
- 冒泡排序改进
- HDU 4616 Game (搜索)、(树形dp)
- 关于java执行顺序