# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
317195 | 8e7 | Hidden Sequence (info1cup18_hidden) | C++14 | 9 ms | 412 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 <algorithm>
#include <utility>
#include <vector>
#include "grader.h"
#define ll long long
#define pii pair<int, int>
#define maxn 200005
using namespace std;
bool poss[1<<10];
bool adj[1<<10][1<<10];
bool Sub (int v, int u, int n, int vs) {
int i = 0;
for (int x = 0;x < vs;x++) {
while (i < n && ((v & (1<<x)) ? 1 : 0) != ((u & (1<<i)) ? 1 : 0)) i ++;
if (i == n) return 0;
i ++;
}
return 1;
}
inline int hbit(int a) {
int ret = 0;
while (a) {
ret++;
a >>= 1;
}
return max(ret, 1);
}
vector < int > findSequence (int n) {
if (n <= 10) {
int len = n / 2 + 1;
for (int i = 0;i < (1<<len);i++) {
int h = hbit(i);
//cout << i << ' ' << h << endl;
for (int j = 0;j < (1<<n);j++) {
if (Sub(i, j, n, len)) {
//cout << i << " " << j << endl;
adj[i][j] = 1;
}
}
}
for (int i = 0;i < (1<<len);i++) {
vector<int> v;
for (int j = 0;j < len;j++) {
if (i & (1<<j)) {
v.push_back(1);
} else {
v.push_back(0);
}
}
if (isSubsequence(v)) {
for (int j = 0;j < (1<<n);j++) {
if (!adj[i][j]) {
poss[j] = true;
//cout << i << " " << j << endl;
}
}
} else {
for (int j = 0;j < (1<<n);j++) {
if (adj[i][j]) {
poss[j] = true;
//cout << i << " " << j << endl;
}
}
}
}
for (int i = 0;i < (1<<n);i++) {
if (!poss[i]) {
vector<int> v;
for (int j = 0;j < n;j++) {
if (i & (1<<j)) {
v.push_back(1);
} else {
v.push_back(0);
}
//cout << v[v.size() - 1];
}
return v;
}
}
return vector<int>();
} else {
int c0 = 0, c1 = 0;
for (int i = 1;i <= n;i++) {
vector<int> v;
for (int j = 0;j < i;j++) v.push_back(0);
if (isSubsequence(v)) {
c0 = i;
} else {
break;
}
}
c1 = n -c0;
vector<int> ans;
for (int i = 1;i <= n;i++) {
vector<int> v = ans;
v.push_back(0);
//cout << min(int(n - v.size()), c1) << endl;
int num = n - v.size();
for (int j = 0;j < min(int(num), c1);j++) v.push_back(1);
//for (int x = 0;x < v.size();x++) {
//cout << v[x];
//}
//cout << endl;
if (isSubsequence(v)) {
ans.push_back(0);
} else {
ans.push_back(1);
c1--;
}
}
return ans;
}
}
/*
5
1 1 1 0 1
12
0 1 0 1 1 1 1 1 0 0 0 0
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |