Submission #519339

#TimeUsernameProblemLanguageResultExecution timeMemory
519339hoanghq2004Palindromic Partitions (CEOI17_palindromic)C++14
100 / 100
176 ms20752 KiB
#include <bits/stdc++.h>
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;

template <typename T>
using ordered_set = tree <T, null_type, less <T>, rb_tree_tag, tree_order_statistics_node_update>;

const int N = 1e6 + 10;
const int base = 31;
const int mod = 1e9 + 7;

int h[N], power[N];

int get(int L, int R) {
    return (0LL + h[R] - 1LL * h[L - 1] * power[R - L + 1] + 1LL * mod * mod) % mod;
}

void solve() {
    string s;
    cin >> s;
    int n = s.size();
    for (int i = 1; i <= n; ++i) h[i] = (1LL * h[i - 1] * base + s[i - 1] - 'a' + 1) % mod;
    power[0] = 1;
    for (int i = 1; i <= n; ++i) power[i] = 1LL * power[i - 1] * base % mod;
    int i = 1, ans = 0;
    while (1) {
        int j = n - i + 1;
        for (int len = 0; len <= n; ++len) {
            if (get(i, i + len) == get(j - len, j)) {
                ans += (i + len != j ? 2 : 1);
                i += len;
                j -= len;
                break;
            }
        }
        ++i, --j;
        if (i > j) break;
    }
    cout << ans << '\n';
}

int main() {
    ios :: sync_with_stdio(0); cin.tie(0);
    int T;
    cin >> T;
    while (T--) solve();
}

Compilation message (stderr)

palindromic.cpp:2: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
palindromic.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      |
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...