Submission #527972

#TimeUsernameProblemLanguageResultExecution timeMemory
527972tabrMartian DNA (IOI16_dna)C++17
0 / 100
13 ms388 KiB
#include <bits/stdc++.h>
using namespace std;
#ifdef tabr
#include "library/debug.cpp"
#else
#define debug(...)
#endif

#ifdef tabr
function<bool(string)> make_test;
#else
#include "dna.h"
#endif

mt19937 rng((unsigned int) chrono::steady_clock::now().time_since_epoch().count());

int rand_int(int a, int b) {  // [a, b]
    return uniform_int_distribution<int>(a, b)(rng);
}

string analyse(int n, int) {
    string ans;
    int lst = -1;
    for (int i = 0; i < n; i++) {
        int x = rand_int(0, 1);
        string c = to_string(x);
        if (make_test(ans + c)) {
            lst = i;
        } else {
            x ^= 1;
        }
        ans += to_string(x);
        if (lst + 15 < i || i == n - 1) {
            if (make_test(ans)) {
                lst = i;
                continue;
            }
            debug(ans);
            int low = lst + 1;
            int high = (int) ans.size();
            while (high - low > 1) {
                int mid = (high + low) >> 1;
                if (make_test(ans.substr(mid))) {
                    low = mid;
                } else {
                    high = mid;
                }
            }
            ans.resize(low);
            debug(ans);
            lst = low - 1;
            break;
        }
    }
    for (int i = (int) ans.size(); i < n; i++) {
        int x = rand_int(0, 1);
        string c = to_string(x);
        if (!make_test(c + ans)) {
            x ^= 1;
        }
        ans = to_string(x) + ans;
    }
    return ans;
}

#ifdef tabr
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s;
    cin >> s;
    make_test = [&](string p) {
        if (p.size() > s.size()) {
            return false;
        }
        for (int i = 0; i <= (int) (s.size() - p.size()); i++) {
            if (p == s.substr(i, p.size())) {
                return true;
            }
        }
        return false;
    };
    cout << analyse((int) s.size(), 0) << '\n';
    return 0;
}
#endif

Compilation message (stderr)

grader.cpp: In function 'bool make_test(std::string)':
grader.cpp:14:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |  for (int i = 0; i < p.size(); i++) {
      |                  ~~^~~~~~~~~~
grader.cpp:23:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  for (int i = 1; i <= ss.size(); i++) {
      |                  ~~^~~~~~~~~~~~
grader.cpp:28:13: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   if (pr[i] == p.size()) {
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...