- sol: BFS 풀이
- Make_max_bit_size()를 통해 최대 비트 수(max_bit_size)를 구한다.
- 넣어둔 로그인 시도 암호를 기반으로 BFS 수행
- XOR을 수행하는 이유: 가장 거리가 먼 비밀번호를 생성하기 위함
#include <bits/stdc++.h>
using namespace std;
int N, M, ret = -1;
int max_bit_size = 0;
vector<int> passwards;
vector<int> visited(1000001, 0);
vector<int> depth(1000001, 0);
void Make_max_bit_size(){
int check = N;
while(check){
check /= 2;
max_bit_size++;
}
}
void Bfs(){
queue<int> que;
for(int i = 0; i < passwards.size(); ++i){
que.push(passwards[i]);
visited[passwards[i]] = 1;
depth[passwards[i]] = 0;
}
while(!que.empty()){
int from = que.front();
que.pop();
for(int i = 0; i < max_bit_size; ++i){
int to = (from ^ (1 << i));
if(to <= N && visited[to] == 0){
visited[to] = 1;
depth[to] = depth[from] + 1;
que.push(to);
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> N >> M;
int passward;
for(int i = 0; i < M; ++i){
cin >> passward;
passwards.push_back(passward);
}
Make_max_bit_size();
Bfs();
for(int i = 0; i <= N; ++i) ret = max(ret, depth[i]);
cout << ret;
}