https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이
www.acmicpc.net
문제 설명
상근이가 숫자 카드들을 가지고 있으며 주어진 숫자가 상근이가 가지고 있는 숫자카드에 있는지 없는지를 판단하는 문제이다.
접근 방법
전형적인 이분탐색 문제입니다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n,m;
int nNumber[500001], mNumber[500001];
void bs(int target,int low, int high){
bool searched = false;
while(low<=high){
int mid = (low+high)/2;
if(nNumber[mid]==target){
searched=true;
break;
}
else if(nNumber[mid]<target) low= mid+1;
else high=mid-1;
}
if(searched){cout<<1<<" ";return;}
else {cout<<0<<" ";return;}
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>nNumber[i];
cin>>m;
for(int i=0;i<m;i++) cin>>mNumber[i];
sort(nNumber,nNumber+n);
//for(int i=1;i<=n;i++) cout<<nNumber[i]<<" ";
for(int i=0;i<m;i++){
int start=0,last=n-1;
bs(mNumber[i],start,last);
}
}
funny algorithm *0*b~
'Algorithms > BOJ' 카테고리의 다른 글
백준 10026 - 적록색약 (0) | 2020.04.02 |
---|---|
백준 1654 - 랜선 자르기 (0) | 2020.04.01 |
백준 11004 - k번째 수 (0) | 2020.03.30 |
백준 3053 - 택시 기하학 (0) | 2020.03.30 |
백준 14889 - 스타트와 링크 (0) | 2020.03.29 |