답안 #986286

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
986286 2024-05-20T08:54:38 Z vjudge1 Palindromic Partitions (CEOI17_palindromic) C++17
100 / 100
95 ms 28756 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ld long double
#define ull unsigned long long
#define pii pair<int,int>
#define pll pair<long long, long long>
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define pb push_back
#define lwb lower_bound
#define upb upper_bound

#define TASKNAME "NAME"

void init()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ///freopen(TASKNAME".INP","r",stdin); freopen(TASKNAME".OUT","w",stdout);
}

const int SZ = 1e6+5;
const ll INF = INT_MAX / 2, MOD = 1e9+7, INFLL = 2e18, BASE = 311;
const double epsilon = 1e-3;

ll t, n, h[SZ], p[SZ];
string s;

void buildHash()
{
    h[0] = 0;
    p[0] = 1;
    for(int i = 1; i <= n; i++)
    {
        p[i] = (p[i-1] * BASE) % MOD;
        h[i] = (h[i-1] * BASE + int(s[i])) % MOD;
    }
}

ll getHash(int lo, int hi)
{
    return ( (h[hi] - h[lo-1]*p[hi - lo + 1]) % MOD + MOD) % MOD;
}

int main()
{
    init();
    cin >> t;
    while(t--)
    {
        cin >> s;
        n = s.length();
        s = " " + s;
        buildHash();
        int i = 1, u = 1, j = n, v = n;
        int res = 0;
        while(i < j)
        {
            if(getHash(u, i) == getHash(j, v))
            {
                res += 2;
                u = i+1;
                v = j-1;
            }
            i++;
            j--;
        }
        if(u <= v) res++;
        cout << res << '\n';
    }
}

# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2392 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2392 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2652 KB Output is correct
11 Correct 1 ms 2652 KB Output is correct
12 Correct 2 ms 2652 KB Output is correct
13 Correct 1 ms 2652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2392 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2652 KB Output is correct
11 Correct 1 ms 2652 KB Output is correct
12 Correct 2 ms 2652 KB Output is correct
13 Correct 1 ms 2652 KB Output is correct
14 Correct 95 ms 27988 KB Output is correct
15 Correct 51 ms 23056 KB Output is correct
16 Correct 88 ms 28756 KB Output is correct
17 Correct 47 ms 17012 KB Output is correct