본문으로 바로가기

[백준] 10815번 문제

category 카테고리 없음 2017. 7. 7. 14:12


백준 10815번 문제는 기본적인 이분탐색 알고리즘을 가지고 풀면됩니다.



#include <cstdio>

#include <algorithm> //c++

using namespace std;

int card[500001];

int serch[500001]; 


//a[0], a[1], ... a[9]를 오름차순으로 정렬하고 싶으면,sort(a,a+10); 라 호출하면 됩니다.


 

bool twoserch(int left, int right, int serchnum){

    

int mid = (left + right) / 2;

    bool result;


    if (left > right || right<0)

        return false;

    else 

{

        if (card[mid] > serchnum){

            result = twoserch(left, mid - 1, serchnum);

        }

        else if (card[mid] < serchnum)

        {

            result = twoserch(mid + 1, right, serchnum);

        }

        else

{

            return true;

        }

   }

}

 

int main(void){

 

 

    int N, M;

 

    scanf("%d", &N);

 

    for (int i = 0; i < N; i++)

        scanf("%d", &card[i]);

 

    scanf("%d", &M);

 

    for (int i = 0; i < M; i++)

        scanf("%d", &serch[i]);

 

    sort(card, card + N);

 

    for (int i = 0; i < M; i++){

        

int searchNum = serch[i];

        int left = 0, right = N - 1;

        int mid;

     

        if (twoserch(left, right, searchNum))

            printf("1 ");

        else

            printf("0 ");

    }

 

 

    return 0;

}