| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1358035 | altern23 | Hidden Sequence (info1cup18_hidden) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include "grader.h"
vector <int> findSequence (int N) {
vector <pair<int, int>> res;
res.push_back({-1, 0});
int elem;
for (int i = 0; i < 2; i++) {
vector <int> v;
for (int j = 1; j <= N/2+1; j++) {
v.push_back(i);
if (!isSubsequence(v)) {
v.pop_back();
break;
}
}
if (v.size() != N/2+1) {
elem = i;
for (auto j : v) res.push_back({j, 0});
break;
}
}
ll sum = N-((ll)res.size()-1), cur = res.size();
vector <int> ans;
if (res.size() == 0) {
for (int i = 1; i <= N; i++) ans.push_back(!elem);
return ans;
}
while (true) {
if (cur == 1) {
for (int j = 0; j < res.size(); j++) {
if (res[j].second == 0) {
vector <pair<int, int>> nxt;
for (int k = 0; k <= j; k++) nxt.push_back(res[k]);
for (int k = 1; k <= sum; k++) nxt.push_back({!elem, -1});
for (int k = j+1; k < (ll)res.size(); k++) nxt.push_back(res[k]);
res.swap(nxt);
break;
}
}
break;
}
ll MN = sum/cur;
// try every index
for (int j = 0; j < res.size(); j++) {
if (res[j].second == 0) {
int sz = 0;
for (int k = 0; k <= MN+1; k++) {
vector <int> tmp;
for (int l = 0; l <= j; l++) {
if (res[l].first == 0) tmp.push_back(res[l].first);
}
for (int l = 1; l <= k; l++) tmp.push_back(!elem);
for (int l = j+1; l < (ll)res.size(); l++) {
if (res[l].first == 0) tmp.push_back(res[l].first);
}
if (isSubsequence(tmp)) sz = k;
else break;
}
if (sz != MN+1) {
vector <pair<int, int>> nxt;
for (int k = 0; k < j; k++) nxt.push_back(res[k]);
nxt.push_back({res[j].first, 1});
for (int k = 1; k <= sz; k++) nxt.push_back({!elem, -1});
for (int k = j+1; k < (ll)res.size(); k++) nxt.push_back(res[k]);
sum -= sz;
cur--;
res.swap(nxt);
break;
}
}
}
}
for (auto i : res) {
if (i.first != -1) ans.push_back(i.first);
}
return ans;
}
