UVA—10474—Where is the Marble—排序查找
其实这道题就是先给出一个混乱的序列,需要你对这个序列进行排序,然后再给出一个数字,询问这个数字是否在该序列里出现过
这其实就是考察lower_bound()的用法:返回第一个大于等于待查找的数key在数组中的指针,(这样就可以得到下标啦^__^)然后对比该下标对应的数与key,据可以知道是否出现了,注意如果找到最后结果加1!!!
再加上一点:upper_bound():返回第一个大于key的指针
#include <iostream>
#include <algorithm>
using namespace std;
int a[10010];
int N,Q,m;
int main(){
scanf("%d%d",&N,&Q);
int temp = 1;
while(N&&Q){
for(int i = 0; i < N ;++i)
scanf("%d",&a[i]);
sort(a,a+N);
printf("CASE# %d:\n",temp++);
while(Q--){
scanf("%d",&m);
int t = lower_bound(a,a+N,m) - a;
if(a[t] == m) printf("%d found at %d\n",m,t+1);
else printf("%d not found\n",m);
}
scanf("%d%d",&N,&Q);
}
return 0;
}