Can you find it? hdu2141 二分查找
2010-04-28 18:48
369 查看
/*
这个题目分在搜索的地方,最近一直在写bfs dfs, 脑子中看见题目就感觉是搜,
其实这个题目很简单的,排序 + 二分查找就OK了
二分一直没有写过,都是在书本上看理论知识,理论联系实际,
这才是最重要的
*/
#include<iostream>//2395029 2010-04-28 18:42:18 Accepted 2141 390MS 1276K 1076 B C++ 悔惜晟
#include<algorithm>
#include<cstdio>
using namespace std;
int a[505], b[505], c[505];
int sumab[250005];
int l, n, m, s;
bool flag;
void search(int x)
{
int begin;
int end;
int mid;
begin = 1;
end = l * n;
while(begin <= end)
{
mid = (begin + end) / 2;
if(sumab[mid] == x)
{
flag = true;
break;
}
else if(sumab[mid] < x)
begin = mid + 1;
else
end = mid - 1;
}
}
int main()
{
int i, j, t;
t = 1;
int count;
while(cin>>l>>n>>m)
{
for(i = 1; i <= l; i++)
cin>>a[i];
for(i = 1; i <= n; i++)
cin>>b[i];
for(i = 1; i <= m; i++)
cin>>c[i];
count = 1;
for(i = 1; i <= l; i++)
for(j = 1; j <= n; j++)
sumab[count++] = a[i] + b[j];
sort(&sumab[1], &sumab[1] + l *n);
printf("Case %d:/n", t++);
cin>>s;
int x;
while(s--)
{
cin>>x;
flag = false;
for(i = 1; i <= m; i++)
{
int ss = x - c[i];
search(ss);
if(flag)
break;
}
if(i <= m)
printf("YES/n");
else
printf("NO/n");
}
}
}
这个题目分在搜索的地方,最近一直在写bfs dfs, 脑子中看见题目就感觉是搜,
其实这个题目很简单的,排序 + 二分查找就OK了
二分一直没有写过,都是在书本上看理论知识,理论联系实际,
这才是最重要的
*/
#include<iostream>//2395029 2010-04-28 18:42:18 Accepted 2141 390MS 1276K 1076 B C++ 悔惜晟
#include<algorithm>
#include<cstdio>
using namespace std;
int a[505], b[505], c[505];
int sumab[250005];
int l, n, m, s;
bool flag;
void search(int x)
{
int begin;
int end;
int mid;
begin = 1;
end = l * n;
while(begin <= end)
{
mid = (begin + end) / 2;
if(sumab[mid] == x)
{
flag = true;
break;
}
else if(sumab[mid] < x)
begin = mid + 1;
else
end = mid - 1;
}
}
int main()
{
int i, j, t;
t = 1;
int count;
while(cin>>l>>n>>m)
{
for(i = 1; i <= l; i++)
cin>>a[i];
for(i = 1; i <= n; i++)
cin>>b[i];
for(i = 1; i <= m; i++)
cin>>c[i];
count = 1;
for(i = 1; i <= l; i++)
for(j = 1; j <= n; j++)
sumab[count++] = a[i] + b[j];
sort(&sumab[1], &sumab[1] + l *n);
printf("Case %d:/n", t++);
cin>>s;
int x;
while(s--)
{
cin>>x;
flag = false;
for(i = 1; i <= m; i++)
{
int ss = x - c[i];
search(ss);
if(flag)
break;
}
if(i <= m)
printf("YES/n");
else
printf("NO/n");
}
}
}
相关文章推荐
- 二分查找 HDOJ 2141 Can you find it?
- hdoj 2141 Can you find it?【二分查找+暴力】
- HDU2141 Can you find it?(二分)
- 二分查找:hdu 2141 Can you find it?
- HDU2141 Can you find it?(二分)
- Can you find it?+合并字串+二分查找
- HDU 2141(Can you find it?) 二分查找
- HDU2141:Can you find it?(二分 + 优化)
- 二分 hdu2141 Can you find it?
- HDU2141:Can you find it? (二分)
- hdu 2141:Can you find it?(数据结构,二分查找)
- HDU2141 Can you find it?(搜索,二分)
- hdu2141 Can you find it? (二分)
- HDU2141: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?【二分查找】
- Can you find it?(数组+二分hdu2141)