10474 Where is the Marble?

題目原文

題目說明
第一行輸入兩個數字 N 和 Q,分別代表:有 N 個大理石和查找 Q 個數。
接下來的 N 行代表大理石所寫上的數,由小到大依序排列,最後求題目所問某數在哪個位置。

思路
利用 algorithm 裡的 sort 進行排序,再利用 lower_bound 查找出位置。
lower_bound :用來找出第一個大於或等於某數的位置。

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 10000;

int main()
{
 int n, q, arr[maxn], count = 0;
 while(scanf("%d %d", &n, &q) == 2 && n)
 {
  printf("CASE# %d:\n", ++count);
  
  for(int i = 0; i < n; i++)
   scanf("%d", &arr[i]);
  sort(arr, arr+n);
  
  while(q--)
  {
   int num;    // 要搜尋的數 
   scanf("%d", &num);
   
   int pos = lower_bound(arr, arr+n, num) - arr;  // 用 lower_bound 查找 num 的位置 
   if(arr[pos] == num)
    printf("%d found at %d\n", num, pos+1);
   else
    printf("%d not found\n", num); 
  }  
 }
}

留言

這個網誌中的熱門文章

離散數學筆記 — vertex cut

機率筆記 (1)

機率筆記 (4) — 隨機變數