Task: | Period |
Sender: | sspilsbury |
Submission time: | 2020-09-26 15:21:24 +0300 |
Language: | C++ (C++11) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.01 s | details |
#2 | ACCEPTED | 0.01 s | details |
#3 | ACCEPTED | 0.01 s | details |
#4 | ACCEPTED | 0.01 s | details |
#5 | ACCEPTED | 0.01 s | details |
#6 | ACCEPTED | 0.01 s | details |
#7 | ACCEPTED | 0.01 s | details |
#8 | ACCEPTED | 0.01 s | details |
#9 | ACCEPTED | 0.01 s | details |
#10 | ACCEPTED | 0.01 s | details |
#11 | ACCEPTED | 0.01 s | details |
#12 | ACCEPTED | 0.01 s | details |
#13 | ACCEPTED | 0.01 s | details |
#14 | ACCEPTED | 0.01 s | details |
#15 | ACCEPTED | 0.01 s | details |
#16 | ACCEPTED | 0.01 s | details |
#17 | ACCEPTED | 0.01 s | details |
#18 | ACCEPTED | 0.01 s | details |
#19 | ACCEPTED | 0.01 s | details |
#20 | ACCEPTED | 0.01 s | details |
#21 | ACCEPTED | 0.01 s | details |
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 |