Submission details
Task:Period
Sender:sspilsbury
Submission time:2020-09-26 15:21:24 +0300
Language:C++ (C++11)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.01 sdetails
#5ACCEPTED0.01 sdetails
#6ACCEPTED0.01 sdetails
#7ACCEPTED0.01 sdetails
#8ACCEPTED0.01 sdetails
#9ACCEPTED0.01 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED0.01 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.01 sdetails
#15ACCEPTED0.01 sdetails
#16ACCEPTED0.01 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.01 sdetails
#19ACCEPTED0.01 sdetails
#20ACCEPTED0.01 sdetails
#21ACCEPTED0.01 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:14:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 1; i < str.size(); ++i) {
                   ~~^~~~~~~~~~~~

Code

#include <vector>
#include <string>
#include <algorithm>
#include <unordered_set>
#include <iostream>

int main(void)
{
  std::string str;
  std::cin >> str;

  int shortest = 1;

  for (int i = 1; i < str.size(); ++i) {
    if (str[i - shortest] == str[i]) {
      continue;
    } else {
      shortest = i + 1;
    }
  }

  std::cout << str.substr(0, shortest) << std::endl;
  return 0;
}


#if 0
template <typename T>
void print_array(std::vector<T> const &v) {
  for (auto x: v) {
    std::cout << x << " ";
  }

  std::cout << std::endl;
}

// Small modification to return also the
// sorted array of valid lengths
void zarr(std::string const &s, std::vector<int> &z, std::vector<int> &lengths) {
  int n = s.size();
  int x = 0, y = 0;
  std::unordered_set<int> lengths_set;

  for (int i = 1; i < n; ++i) {
    z[i] = std::max(0, std::min(z[i - x], y - i + i));

    while (i + z[i] < n && s[z[i]] == s[i + z[i]]) {
      x = i; y = i + z[i]; z[i]++;
    }

    if (z[i] != 0) {
      lengths_set.insert(z[i]);
    }
  }

  for (int l : lengths_set) {
    lengths.push_back(l);
  }

  std::sort(lengths.begin(), lengths.end());
}

int main(void) {
  std::string str;
  std::cin >> str;
  std::vector<int> z(str.size());
  std::vector<int> lengths;

  zarr(str, z, lengths);

  print_array(z);

  // Now that we have the z-array, we can simply check if
  // a substring is periodic by watching it repeat throughout
  // the string.
  for (auto i: lengths) {
    int p = 0;
    bool found = true;
    while (p + i < str.size()) {
      p += i;

      // How much do we have left?
      int remaining = std::min(i, (int) (str.size() - p));

      // Do we see this repeat? If so we can keep going
      if (z[p] != remaining) {
        found = false;
        break;
      }
    }

    if (found) {
      std::cout << str.substr(0, i) << std::endl;
      break;
    }
  }

  // No repeating periods, print entire string
  std::cout << str << std::endl;

  return 0;
}
#endif

Test details

Test 1

Verdict: ACCEPTED

input
acbacbac

correct output
acb

user output
acb

Test 2

Verdict: ACCEPTED

input
a

correct output
a

user output
a

Test 3

Verdict: ACCEPTED

input
z

correct output
z

user output
z

Test 4

Verdict: ACCEPTED

input
aa

correct output
a

user output
a

Test 5

Verdict: ACCEPTED

input
az

correct output
az

user output
az

Test 6

Verdict: ACCEPTED

input
aba

correct output
ab

user output
ab

Test 7

Verdict: ACCEPTED

input
abab

correct output
ab

user output
ab

Test 8

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
a

user output
a

Test 9

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

user output
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
Truncated

Test 10

Verdict: ACCEPTED

input
ababababababababababababababab...

correct output
ab

user output
ab

Test 11

Verdict: ACCEPTED

input
tgainzxtgainzxtgainzxtgainzxtg...

correct output
tgainzx

user output
tgainzx

Test 12

Verdict: ACCEPTED

input
qmuflfcbqweunsjsodgspftyvikiwk...

correct output
qmuflfcbqweunsjsodgspftyvikiwk...

user output
qmuflfcbqweunsjsodgspftyvikiwk...

Test 13

Verdict: ACCEPTED

input
ohbsbconrkytyhtmibzrwwqdsqojoe...

correct output
ohbsbconrkytyhtmibzrwwqdsqojoe...

user output
ohbsbconrkytyhtmibzrwwqdsqojoe...
Truncated

Test 14

Verdict: ACCEPTED

input
hxkuxccasglgpvnfnhdoqelpvxughq...

correct output
hxkuxccasglgpvnfnhdoqelpvxughq...

user output
hxkuxccasglgpvnfnhdoqelpvxughq...
Truncated

Test 15

Verdict: ACCEPTED

input
mhwvddomkxrzuziwbfoaqxzjmfevla...

correct output
mhwvddomkxrzuziwbfoaqxzjmfevla...

user output
mhwvddomkxrzuziwbfoaqxzjmfevla...
Truncated

Test 16

Verdict: ACCEPTED

input
gnruvsfdjemxstfuysiqkrtwbgtono...

correct output
gnruvsfdjemxstfuysiqkrtwbgtono...

user output
gnruvsfdjemxstfuysiqkrtwbgtono...
Truncated

Test 17

Verdict: ACCEPTED

input
xqiwjzftugyurtwsziffnqaeozescu...

correct output
xqiwjzftugyurtwsziffnqaeozescu...

user output
xqiwjzftugyurtwsziffnqaeozescu...
Truncated

Test 18

Verdict: ACCEPTED

input
vgygtamnegxyxvjbuceoliipbkggyw...

correct output
vgygtamnegxyxvjbuceoliipbkggyw...

user output
vgygtamnegxyxvjbuceoliipbkggyw...
Truncated

Test 19

Verdict: ACCEPTED

input
qvjhmaafzlugwwaygdojysrjoydnnj...

correct output
qvjhmaafzlugwwaygdojysrjoydnnj...

user output
qvjhmaafzlugwwaygdojysrjoydnnj...
Truncated

Test 20

Verdict: ACCEPTED

input
tusmizkjfdazyohorfcumwmalodvnc...

correct output
tusmizkjfdazyohorfcumwmalodvnc...

user output
tusmizkjfdazyohorfcumwmalodvnc...
Truncated

Test 21

Verdict: ACCEPTED

input
zqikxaoeizncpvlpcvomrdkstackqq...

correct output
zqikxaoeizncpvlpcvomrdkstackqq...

user output
zqikxaoeizncpvlpcvomrdkstackqq...
Truncated