#include <bits/stdc++.h>
using namespace std;
vector<int> paint(int n)
{
vector<int> ret;
int ile = (n+15)/16;
for (int i = 0; i < ile; i++) {
for (int j = 0; j < 7; j++)
ret.push_back(1);
ret.push_back(0);
for (int j = 0; j < 7; j++) {
bool czyjest = ((i&(1<<j)) != 0);
ret.push_back(czyjest);
}
ret.push_back(0);
}
while (ret.size() != n)
ret.pop_back();
ret.push_back(16);
return ret;
}
int find_location(int n, vector<int> c)
{
int k = c.size();
if (c.back() == -1) {
int ile = 0;
while (c[k-ile-1] == -1)
ile++;
return n + ile - k;
}
int streak = 0;
int gdzie = 0;
for (int i = 0; i < k; i++) {
if (c[i] == 1)
streak++;
if (c[i] == 0)
streak = 0;
if (streak == 7) {
gdzie = i-6;
break;
}
}
if (streak == 7) {
bool czysame0suf = true;
for (int i = k-1; i > gdzie+7; i--)
if (c[i] != 0) {
czysame0suf = false;
break;
}
int wyn = 0;
int wykl = 0;
for (int i = gdzie+8; i < k; i++) {
int pot = (1<<wykl);
wyn += (czysame0suf|c[i]) * pot;
wykl++;
}
for (int i = 0; i < gdzie-1; i++) {
int pot = (1<<wykl);
wyn += c[i] * pot;
wykl++;
}
if (czysame0suf)
wyn++;
// gowno case 1
if (gdzie == 0 or gdzie == 1) {
wyn = 0;
for (int i = 0; i < 7; i++) {
int pot = (1<<i);
wyn += c[i+gdzie+8] * pot;
}
}
// gowno case 2
if (gdzie == k-7 or gdzie == k-8) {
wyn = 0;
for (int i = 0; i < 7; i++) {
int pot = (1<<i);
wyn += c[i+gdzie-8] * pot;
}
wyn++;
}
return 16*wyn - gdzie;
}
int idx = 0;
while (c[idx] == 1)
idx++;
idx++;
int wyn = 0;
for (int i = 0; i < 7; i++) {
int pot = (1<<i);
wyn += c[idx+i] * pot;
}
return 16*wyn + 8 - idx;
}
/*mt19937 jd;
int losuj(int a, int b)
{
return (jd()%(b-a+1)) + a;
}
vector<int> gen(int x, vector<int>& lol)
{
int k = lol.back();
vector<int> ret;
for (int i = x; i < x+k; i++) {
if (i >= lol.size()-1)
ret.push_back(-1);
else
ret.push_back(lol[i]);
}
return ret;
}
int main(void)
{
int n;
cin >> n;
jd.seed(n);
vector<int> x = paint(n);
for (int c : x)
cout << c;
cout << "\n\n";
for (int i = 0; i <= 10000; i++) {
int idx = losuj(0, n-1);
vector<int> tmp = gen(idx, x);
int znajdz = find_location(n, tmp);
if (znajdz == idx)
cout << "Test #" << i << " ok\r";
else {
cout << "Test #" << i << " beka z cb\n";
cout << "X=" << idx << " find=" << znajdz << '\n';
break;
}
}
return 0;
}
*/
# | 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... |