Минимальное число, которое нельзя составить из этого набора цифр
На вход дана строка, содержащая цифры. Надо вывести минимальное число, которое нельзя составить из этих цифр. Например для строки 0123456789 ответ 11. Тк для 11 нужны две 1.
Вот мой код, но он не проходит по времени, помогите пожалуйста:
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx")
#pragma GCC optimize 03
#pragma GCC optimize("unroll-loops")
#include <iostream>
#include <string>
using namespace std;
int a[10] = {0,0,0,0,0,0,0,0,0,0};
//7129045863
bool yes(long long i) {
if (i == 11) {
i = 11;
}
int b[10] = {0,0,0,0,0,0,0,0,0,0};
if (i == 0) { b[0] = 1; }
while (i > 0) {
b[i % 10]++;
i /= 10;
}
for (int h = 0; h < 10; h++) {
if (a[h] < b[h]) {
return false;
}
}
return true;
}
int main() {
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false) ;
string s;
cin >> s;
for (auto i : s) {
a[i - '0']++;
}
for (long long i = 1; i < 1000000000000000; i++) {
if (!yes(i)) {
cout << i;
return 0;
}
}
return 0;
}