https://www.acmicpc.net/problem/13701
13701번: 중복 제거
문제: N개의 정수 A1, A2, ..., AN 을 읽고, 이들 중에서 반복되는 수를 제외하고 남은 N'개의 수 B1, B2, ..., BN’ 을 입력된 순서대로 출력하시오. 이때, 0 ≤ Ai < 225 = 33554432, i=1,2,…,N. 입력의 개수 N은 1
www.acmicpc.net
비트마스크를 이용한 문제이다.
메모리 초과가 안 나기 위해서 unsigned char를 이용해 메모리를 줄였으며 8개의 비트에 각 정보를 담은(전체 크기 / 8) 만큼의 메로리로 더 줄였다.
#include <bits/stdc++.h>
#define l long long
#define INF 2e9
#define p pair<int,int>
#define vc vector<unsigned char>
#define F first
#define S second
using namespace std;
bool check(int k,vc &v){
return v[k >> 3] & (1 << (k & 7));
}
void Set(int k,vc &v){
v[k >> 3] &= ~(1 << (k & 7));
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
vc v((33554432 + 7) / 8 + 1,255);
int n;
while(cin >> n){
if(check(n,v)){
cout << n << " ";
Set(n,v);
}
}
}
'baekjoon' 카테고리의 다른 글
17144번 미세먼지 안녕! (0) | 2022.04.12 |
---|---|
16234번 인구 이동 (0) | 2022.04.10 |
16975번 수열과 쿼리 21 (0) | 2022.04.06 |
10999번 구간 합 구하기 2 (0) | 2022.04.05 |
11559번 Puyo Puyo (0) | 2022.04.04 |