Submission #415848

#TimeUsernameProblemLanguageResultExecution timeMemory
415848TLP39Martian DNA (IOI16_dna)C++14
100 / 100
14 ms424 KiB
#include "dna.h"
#include <cstdlib>
#include<bits/stdc++.h>
using namespace std;

int n;
string s,v;
int l;

void to_length(int x)
{
    while(s.size()<x)
    {
        s.push_back('1');
    }
    while(s.size()>x)
    {
        s.pop_back();
    }
}

 void subs(int x)
 {
     int temp=v.size();
     while(temp<x)
     {
         v.append(s,temp,1);
         temp++;
     }
     while(temp>x)
     {
         v.pop_back();
         temp--;
     }
 }

void find_length()
{
    int hi=n,low=0,av;
    while(hi>low)
    {
        av=(hi+low+1)>>1;
        to_length(av);
        if(make_test(s)) low=av;
        else hi=av-1;
    }
    l=hi;
}

string analyse(int N, int t) {
    n=N;
    find_length();
    int cou=l,last_confirm=l;
    to_length(l);
    while(cou<=l)
    {
        s.append("0");
        if(make_test(s))
        {
            last_confirm=s.size();
            cou=0;
        }
        else
        {
            s.pop_back();
            s.append("1");
            cou++;
        }
    }
    int hi=s.size(),low=last_confirm,av;
    while(hi>low)
    {
        av=(hi+low+1)>>1;
        subs(av);
        if(make_test(v)) low=av;
        else hi=av-1;
    }
    while(s.size()>hi) s.pop_back();
    while(s.size()<n)
    {
        s.insert(0,"0");
        if(!make_test(s))
        {
            s.erase(0,1);
            s.insert(0,"1");
        }
    }
    return s;
}

Compilation message (stderr)

dna.cpp: In function 'void to_length(int)':
dna.cpp:12:19: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   12 |     while(s.size()<x)
      |           ~~~~~~~~^~
dna.cpp:16:19: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   16 |     while(s.size()>x)
      |           ~~~~~~~~^~
dna.cpp: In function 'std::string analyse(int, int)':
dna.cpp:78:19: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   78 |     while(s.size()>hi) s.pop_back();
      |           ~~~~~~~~^~~
dna.cpp:79:19: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |     while(s.size()<n)
      |           ~~~~~~~~^~
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...