안녕하세요. 오늘은 가장 긴 부분수열을 구할 거예요.
https://www.acmicpc.net/problem/23630
조건 1을 만족하기 위해서 뽑힌 K개의 수 모두에 대해서 적어도 하나의 비트에서는 무조건 1이 다 있어야합니다.
그러므로 N개의 수 모두에서 각각에 비트 (1,2,4,8 등등)에서 1의 개수를 세고 최댓값을 출력해주면 됩니다.
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
ll N, i, x, bitcnt[22] = { 0 };
cin >> N;
for (i = 1; i <= N; i++)
{
cin >> x;
ll cnt = 0;
while (x)
{
cnt++;
bitcnt[cnt] += x % 2;
x /= 2;
}
}
ll ans = 0;
for (i = 1; i <= 20; i++)
ans = max(ans, bitcnt[i]);
cout << ans;
}
감사합니다.