https://vjudge.net/problem/UVA-10474
分析:VJ的题,竟然翻车了2次。。。
这道题主要在于二分思想的使用以及STL模板的应用
需要注意的是本题在多组输入方面存在一些坑点:在lower_bound查找中容易出现一些问题,比如上一组输入中存在12,且位置为10,但在下一组中只有5个数,询问中含有12,本来应该输出"12 not found"但如果不加判读就会出现
“12 found at 10”,然而本题中只出现了5个数。。。因此需要判断a[y]==x&&y>=1&&y<=N是否成立才可以
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10005;
int main()
{
int T=1,N,Q,a[maxn],x,y;
int i,j;
while(~scanf("%d %d",&N,&Q))
{
if(N==0&&Q==0) break;
printf("CASE# %d:\n",T);
T++;
for(i=1;i<=N;i++) scanf("%d",&a[i]);
sort(a+1,a+1+N);
while(Q--)
{
scanf("%d",&x);
y=lower_bound(a+1,a+1+N,x)-a;
if(a[y]==x&&y>=1&&y<=N) printf("%d found at %d\n",x,y);
else printf("%d not found\n",x);
}
}
return 0;
}