当前位置: 首页 > 工具软件 > Marble > 使用案例 >

紫书算法 排序与检索 大理石在哪儿(Where is the Marble?,Uva 10474)代码及讲解

薄龙光
2023-12-01

现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回 答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上 写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石上 的数合并到一行,所有问题也合并到一行。) 
样例输入:4 1
     2 3 5 1 
     5
     5 2 
    1 3 3 3 1 
    2 3 
    样例输出: 
    CASE #1: 
    5 found at 4 
    CASE #2: 
    2 not found
    3 found at 3 

一.这道题主要就是先排序,再查找。
使用sortlower_bound
头文件algorithm

#include<cstdio>
 #include<algorithm> 
 using namespace std; 
 const int maxn = 10000;
  int main() 
  { 
  int n, q, x, a[maxn], kase = 0; 
  while(scanf("%d%d", &n, &q) == 2 && n) //输入石头和问题个数且大理石个数不为0
  { 

  for(int i = 0; i < n; i++) 
  scanf("%d", &a[i]);
     printf("CASE# %d:\n", ++kase); 
  sort(a, a+n); //排序
  while(q--)//问题个数
  { scanf("%d", &x); //输入查找的数字
  int p = lower_bound(a, a+n, x) - a; //在已排序数组a中寻找x
   if(a[p] == x)
    printf("%d found at %d\n", x, p+1); 
    else printf("%d not found\n", x);
     } 
}
return 0;
 } 

****然后关于这个算法的记事本
头文件<algorithm>
sort函数快速排序
形式:sort(a,a+n)   a数组   a+n(n个数)
lower_bound函数查找数
形式:lower_bound(a,a+n,x)-a**

 

 类似资料: