๊ตฌ๋ฆ
์ด๋ผ๋ ๊ณณ์์ ๋ฌธ์ ํ์ด ์ฑ๋ฆฐ์ง(๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง)๋ฅผ ํ๋ค๊ณ ํด์ ์ฐธ์ฌ ์ค์ด๋ค. ์ด๋ฒคํธ ๊ธฐ๊ฐ ๋์ ๋ฌธ์ ๊ฐ ๊พธ์ค์ด ์ฌ๋ผ์ค๋ฉฐ, ์ฃผ์ 2ํ์ฉ (ํน์ ๊ทธ ์ด์) ์ฑ๋ฆฐ์ง ๋ฌธ์ ๋ค์ ๋ํด ํ์ด๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ค์ ํ์ดํด๋ณด๊ณ , ํ๊ธฐ๋ฅผ ๋จ๊ฒจ๋ณด๋ ค๊ณ ํ๋ค.
์ด ๋ฌธ์ ๋ ๋จ์ ์ ๋ ฌ์ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค. ์ ๋ ฌ ์กฐ๊ฑด์ ์ปค์คํ
ํ๊ธฐ ์ํด, ๊ตฌ์กฐ์ฒด๋ฅผ ํ๋ ๋ง๋ค์ด์ ๊ทธ ๊ตฌ์กฐ์ฒด์ operator
๋ฅผ overloading
ํด์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๋ฌธ์ ์์ ์ ๋ ฌ ์กฐ๊ฑด์ ๋๊ฐ์ง๊ฐ ์์ผ๋ฉฐ, 1์ด ๋์ผํ ๋ 2๋ฅผ ์ ์ฉํ๋ค.
1์ ๊ตฌํ์ gcc
์ ๊ฒฝ์ฐ์ ๋ด์ฅํจ์์ธ __builtin_popcount
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ ๋ ฌ ๋ค K๋ฒ์งธ ์์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค. ์๊ฐ๋ณต์ก๋๋ ์ด ์ด๋ค.
#include <bits/stdc++.h>using namespace std;struct Number {int v;bool operator<(const struct Number& t) const {if (__builtin_popcount(v) != __builtin_popcount(t.v))return __builtin_popcount(v) > __builtin_popcount(t.v);return v > t.v;}};int main() {int N, K; scanf("%d %d", &N, &K);vector<Number> A;for(int i = 0; i < N; ++i) {int tmp; scanf("%d", &tmp);A.push_back({tmp});}sort(A.begin(), A.end());printf("%d\n", A[K - 1].v);return 0;}