답안 #43240

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
43240 2018-03-11T09:36:06 Z krauch Palindromic Partitions (CEOI17_palindromic) C++14
60 / 100
10000 ms 16300 KB
/*
 _    _    _______   _    _
| |  / /  |  _____| | |  / /
| | / /   | |       | | / /
| |/ /    | |_____  | |/ /
| |\ \    |  _____| | |\ \
| | \ \   | |       | | \ \
| |  \ \  | |_____  | |  \ \
|_|   \_\ |_______| |_|   \_\

*/
#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;
typedef long long ll;
typedef double ld;
typedef pair <int, int> PII;
typedef pair <ll, ll> PLL;
typedef pair < ll, int > PLI;


#define F first
#define S second
#define pb push_back
#define eb emplace_back
#define right(x) x << 1 | 1
#define left(x) x << 1
#define forn(x, a, b) for (int x = a; x <= b; ++x)
#define for1(x, a, b) for (int x = a; x >= b; --x)
#define mkp make_pair
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define y1 kekekek

#define fname ""

const ll ool = 1e18 + 9;
const int oo = 1e9 + 9, base = 1e9 + 7;
const ld eps = 1e-7;
const int N = 2e6 + 6;

int d[N], mn[N];
int hs[N], p[N], pr = 37;
char a[N], b[N];

int get(int l, int r) {
    return (hs[r] - 1ll * hs[l - 1] * p[r - l + 1] % base + base) % base;
}

int main() {
	#ifdef krauch
        freopen("input.txt", "r", stdin);
    #else
        //freopen(fname".in", "r", stdin);
        //freopen(fname".out", "w", stdout);
    #endif

    int T;
    scanf("%d\n", &T);
    while (T--) {
        string s;
        getline(cin, s);
        int n = sz(s);
        p[0] = 1;
        forn(i, 1, n) {
            a[i] = s[i - 1];
            hs[i] = (1ll * hs[i - 1] * pr + a[i] - 'a') % base;
            p[i] = 1ll * p[i - 1] * pr % base;
        }

        if (n & 1) d[n / 2 + 1] = 1;
        else d[n / 2 + 1] = 0;
        mn[n / 2 + 1] = 0;
        for1(i, n / 2, 1) {
            mn[i] = 0;
            forn(j, 1, n / 2 - i + 1) {
                if (get(i, i + j - 1) == get(n - i - j + 2, n - i + 1)) {
                    mn[i] = j;
                    break;
                }
            }
            if (mn[i]) d[i] = d[i + mn[i]] + 2;
            else d[i] = 1;
        }
        cout << d[1] << "\n";
    }

	return 0;
}

Compilation message

palindromic.cpp: In function 'int main()':
palindromic.cpp:61:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d\n", &T);
                      ^
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 1 ms 408 KB Output is correct
4 Correct 2 ms 408 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 1 ms 408 KB Output is correct
4 Correct 2 ms 408 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 2 ms 532 KB Output is correct
7 Correct 2 ms 660 KB Output is correct
8 Correct 2 ms 660 KB Output is correct
9 Correct 2 ms 660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 1 ms 408 KB Output is correct
4 Correct 2 ms 408 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 2 ms 532 KB Output is correct
7 Correct 2 ms 660 KB Output is correct
8 Correct 2 ms 660 KB Output is correct
9 Correct 2 ms 660 KB Output is correct
10 Correct 10 ms 676 KB Output is correct
11 Correct 202 ms 680 KB Output is correct
12 Correct 27 ms 804 KB Output is correct
13 Correct 7 ms 804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 1 ms 408 KB Output is correct
4 Correct 2 ms 408 KB Output is correct
5 Correct 1 ms 460 KB Output is correct
6 Correct 2 ms 532 KB Output is correct
7 Correct 2 ms 660 KB Output is correct
8 Correct 2 ms 660 KB Output is correct
9 Correct 2 ms 660 KB Output is correct
10 Correct 10 ms 676 KB Output is correct
11 Correct 202 ms 680 KB Output is correct
12 Correct 27 ms 804 KB Output is correct
13 Correct 7 ms 804 KB Output is correct
14 Correct 2805 ms 16300 KB Output is correct
15 Execution timed out 10092 ms 16300 KB Time limit exceeded
16 Halted 0 ms 0 KB -