Submission #915843

#TimeUsernameProblemLanguageResultExecution timeMemory
915843vjudge1Palindromic Partitions (CEOI17_palindromic)C++17
100 / 100
157 ms3540 KiB
#include <bits/stdc++.h> #include <cassert> #define MAX_WORD_LENGTH 5100000 int longest_palindromic_partition(const std::string& word) { const int n = word.length(); const unsigned int base = 131; int done_chars = 0; int n_chunks = 0; while (done_chars * 2 < n) { unsigned int left_hash = 0, right_hash = 0; unsigned int base_power = 1; for (int chunk_size = 1; true; chunk_size++) { const int l = done_chars; const int r = n - done_chars - chunk_size; if (l + chunk_size - 1 >= r) { return n_chunks + 1; } base_power = (chunk_size == 1) ? 1 : base_power * base; left_hash += static_cast<unsigned int>(word[l + chunk_size - 1]) * base_power; right_hash = static_cast<unsigned int>(word[r]) + right_hash * base; if (left_hash == right_hash && word.compare(l, chunk_size, word, r, chunk_size) == 0) { n_chunks += 2; done_chars += chunk_size; break; } } } return n_chunks; } int main() { int n; std::cin >> n; for (int i = 0; i < n; i++) { std::string word; std::cin >> word; assert(word.length() <= MAX_WORD_LENGTH); std::cout << longest_palindromic_partition(word) << std::endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...