# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
983336 | canadavid1 | Sequence (BOI14_sequence) | C++14 | 125 ms | 2440 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <bitset>
#include <string>
using digits = std::bitset<10>;
using u64 = unsigned long long;
u64 min_valid(std::vector<digits> v)
{
if(v.size()==0) return 0;
if(v.size()==1)
{
auto w = v[0];
u64 o = 0;
if(w.none()) return 0;
if(w.count()==1 && w[0]) return 10;
int i = 1;
while(!w[i]) i++;
o = i;
w[i] = 0;
if(w[0]) o *= 10;
for(int i = 1; i < 10; i++)
{
if(!w[i]) continue;
o *= 10;
o += i;
}
return o;
}
u64 min = (u64)-1;
for(u64 ls = 0; ls < 10; ls++)
{
std::vector<digits> n;
auto k = ls;
n.emplace_back();
for(int i = 0; i < v.size(); i++)
{
auto r = v[i];
r[k] = 0;
n.back() |= r;
if(++k==10)
{
k = 0;
n.emplace_back();
}
}
while(n.size()&&n.back().none()) n.pop_back();
if(n == v) continue;
auto a = min_valid(n);
if(a==0 && ls == 0 && v[0][0]) a++;
min = std::min(10*a+ls,min);
}
return min;
}
u64 brute_force(std::vector<digits> v)
{
for(int i = 0; i < 1e6; i++)
{
bool kl = 1;
for(int k = 0; k < v.size(); k++)
{
auto s = std::to_string(i+k);
bool f = false;
for (auto j : s) f |= v[k][j-'0'];
if(!f) {kl=0;break;};
}
if(kl) return i;
}
return -1;
}
int main()
{
int K;
std::cin >> K;
std::vector<digits> v(K);
for(auto& i : v) {int j; std::cin >> j; i[j]=1;}
auto a = min_valid(v);
std::cout << a << "\n";
}
Compilation message (stderr)
# | 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... |