2011年8月17日 星期三

d732: 二分搜尋法

內容 :
    給你一個嚴格遞增的數列A1,A2,A3.....An(1<=n<=100000),
    &下面有幾個問題的詢問數k(1<=K<=100000),
    以及k個詢問的整數x,求數列中是否存在一個Ai(1<=i<=n)的值與X相等?

輸入說明 :
    第一行包含兩個整數n,k分別表示數列長度以及詢問數,
    第二行包含n個整數第i(1<=i<=n)個整數依序為數列中Ai的值,
    第三行包含k個詢問的整數x.

輸出說明 :
    對於每個詢問整數x對應一行輸出:
    輸出 i 的值
    其中1<=i<=n且Ai=x
    若沒有這樣的i值請輸出0代替.

範例輸入 :
5 5
1 3 4 7 9
3 1 9 7 -2

範例輸出 :
2
1
5
4
0

程式碼 :
#include<stdio.h>

int binarysearch(int a[], int head, int tail, int x)
{
    int mid;
        
    while(head <= tail)
    {
        mid = (head + tail) / 2;
        if(a[mid] < x)
            head = mid + 1;
        else if(a[mid] > x)
            tail = mid - 1;
        else
            return mid;
    }    
    return -1;
}

int main()
{
    int i,x,n,k,a[100001];
    
    while(scanf("%d %d",&n,&k)==2)
    {
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
        for(i=0; i<k; i++)
        {
            scanf("%d",&x);
            printf("%d\n",binarysearch(a,0,n-1,x)+1);
        }
    }    
    return 0;
}




http://zerojudge.tw/ShowProblem?problemid=d732

沒有留言:

張貼留言