[λ°±μ€/C++] 13701. μ€λ³΅ μ κ±°
λ¬Έμ
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
Nκ°μ μ μ A1, A2, ..., AN μ μ½κ³ , μ΄λ€ μ€μμ λ°λ³΅λλ μλ₯Ό μ μΈνκ³ λ¨μ N'κ°μ μ B1, B2, ..., BN’ μ μ λ ₯λ μμλλ‘ μΆλ ₯νμμ€. μ΄λ,
- 0 ≤ Ai < 2^25 = 33554432, i=1,2,…,N.
- μ λ ₯μ κ°μ Nμ 1 μ΄μ 500λ§ μ΄νμ΄λ€.
νμ΄
μ«μλ₯Ό μμλλ‘ μ λ ₯λ°μμ, μ΄μ μ λ€μ΄μ¨μ μ΄ μλ μ«μλ©΄ μΆλ ₯νλ μμ£Ό κ°λ¨ν΄λ³΄μ΄λ λ¬Έμ μμ§λ§,
λ©λͺ¨λ¦¬ μ΄κ³Όκ° μ΄ λ¬Έμ μ ν΅μ¬μ΄μλ€.
μ«μμ λ²μκ° 2^25κΉμ§μκΈ° λλ¬Έμ, μ€λ³΅μ²΄ν¬νλ λ°°μ΄μ ν¬κΈ°λ₯Ό 1<<2^25λ‘ μ‘μΌλ©΄ μ΄ λ¬Έμ μ λ©λͺ¨λ¦¬ μ νμΈ 8MBλ₯Ό λμ΄λ²λ¦¬κΈ° λλ¬Έμ΄λ€.
λ°λΌμ, λΉνΈ λ§μ€ν¬λ₯Ό μ΄μ©ν΄μΌ νλ λ¬Έμ μλ€. νμ΄λ λ€λ₯Έ μ¬λ¬ λΈλ‘κ·Έλ€μ μ°Έκ³ νλ€! λ€λ€ λΉμ·ν λ°©μμΌλ‘ νμ΄λ₯Ό ν κ² κ°λ€.
intκ° 32λΉνΈλΌλ κ²μ΄ ν΅μ¬μ΄λ€.
λ°°μ΄μ ν¬κΈ°λ₯Ό (1<<2^25) / 32λ‘ μ νκ³ , μ λ ₯λ μ«μ Aμ λν΄
A/32 : μΈλ±μ€, 1<<(A%32) : κ° μΌλ‘ λ£μ΄μ£Όλ©΄ λλ€.
μ²μμ μ΄κ² 무μ¨λ§μΈμ§ μ΄ν΄κ° μλμμΌλ κ·Έλ¦Όμ κ·Έλ €λ³΄λ©΄μ μ΄ν΄ν μ μμλ€.
λ°°μ΄ ν μΉΈμ intμ΄λ€. κ·Έλ¦¬κ³ intλ 32κ°μ λΉνΈλ‘ ννλλ€.
λ°λΌμ, μ«μλ₯Ό μ λ ₯νμ λ μλμ κ°μ κ²°κ³Όκ° λνλκ³ κ²°λ‘ μ μΌλ‘ λΉνΈλ§μ€νΉμ μ΄μ©ν΄ λ°°μ΄ ν μΉΈμ 32κ°μ μ«μλ₯Ό ννν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬λ₯Ό 32λ°° μλ μ μλ κ²μ΄λ€.
μ½λ
#include <iostream>
using namespace std;
int check[(1 << 25)/32];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int input;
while (cin>>input){
int idx = input / 32;
int val = 1 << (input % 32);
if (!(check[idx]&val)) {
check[idx] += val;
cout << input << " ";
}
}
return 0;
}
κ²°κ³Ό
μΌλ§μ λΆν° cin,cout λμ μ scanf, printfλ‘ μ μΆλ ₯μ λμ νκ³ μλλ°,
μ΄λ² λ¬Έμ μμλ cin,coutμ΄ μκ°μ΄ λ μ κ² κ±Έλ Έλ€. μμ§..?
(맨 μλ : scanf,printfμ΄μ©, μμ λκ° : cin,coutμ΄μ©)