#include <bits/stdc++.h>
#define uwu return 0;
using namespace std;
long long solve(vector <int> input, int cnt, int use_zero){
if(cnt == 18)
return 1;
if(input.empty())
return use_zero;
if(input.size() == 1){
if(!input[0])
return use_zero;
long long ret = 0;
if(input[0] & 1){
if(__builtin_popcount(input[0]) >= 2){
input[0] ^= 1;
int lb = input[0] & -input[0];
ret = 10 * __lg(lb);
input[0] ^= (1 << __lg(lb));
}
else
return 10;
}
for (int k = 0; k < 10; k++){
if(input[0] & (1 << k)){
ret *= 10;
ret += k;
}
}
return ret;
}
long long ret = 1e18;
for (int i = 0; i <= 9; i++){
int nw = i;
vector <int> bit_to_one;
int now = 0;
for(auto j:input){
for (int k = 0; k < 10; k++){
if(k != nw && (j & (1 << k))){
now |= (1 << k);
}
}
nw++;
if(nw == 10){
nw = 0;
bit_to_one.push_back(now);
now = 0;
}
}
if(now){
bit_to_one.push_back(now);
now = 0;
}
if((input[0] & 1) && (i == 0))
use_zero = 1;
if(i != 0)
use_zero = 0;
ret = min(ret, solve(bit_to_one, cnt + 1, use_zero) * 10 + i);
}
return ret;
}
int main(){
cin.tie(0), ios::sync_with_stdio(0);
int N;
cin >> N;
vector <int> input;
for (int i = 1, a; i <= N; i++){
cin >> a;
input.push_back((1 << a));
}
cout << solve(input, 0, 0) << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |