Submission #94566

# Submission time Handle Problem Language Result Execution time Memory
94566 2019-01-21T01:14:39 Z jasony123123 Palindromic Partitions (CEOI17_palindromic) C++11
100 / 100
113 ms 27572 KB
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
//#include <ext/pb_ds/tree_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
//using namespace __gnu_pbds;

#define FOR(i,start,end) for(int i=start;i<(int)(end);i++)
#define FORE(i,start,end) for(int i=start;i<=(int)end;i++)
#define RFOR(i,start,end) for(int i = start; i>end; i--)
#define RFORE(i,start,end) for(int i = start; i>=end; i--)
#define all(a) a.begin(), a.end()
#define mt make_tuple
#define mp make_pair
#define v vector
#define sf scanf
#define pf printf
#define dvar(x) cout << #x << " := " << x << "\n"
#define darr(x,n) FOR(i,0,n) cout << #x << "[" << i << "]" << " := " << x[i] << "\n"

typedef long long ll;
typedef long double ld;
typedef pair<int, int > pii;
typedef pair<ll, ll> pll;
//template <class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<class T> void minn(T &a, T b) { a = min(a, b); }
template<class T> void maxx(T &a, T b) { a = max(a, b); }

void io() {
#ifdef LOCAL_PROJECT 
	freopen("input.in", "r", stdin); freopen("output.out", "w", stdout);
#else 
	/* online submission */

#endif 
	ios_base::sync_with_stdio(false); cin.tie(NULL);
}

const ll MOD = 1000000007LL;
const ll PRIME = 105943LL;
const ll INF = 1e18;
/****************************************************************/
inline ll add(ll a, ll b) { return (a + b) % MOD; }
inline ll mul(ll a, ll b) { return (1LL * a*b) % MOD; }

const int SZ = 1e6 + 1;
ll h[SZ], p[SZ];

void sethash(string &s) {
	FOR(i, 0, s.size())
		h[i + 1] = add(mul(s[i], p[i + 1]), h[i]);
}
ll get(int i, int j) {
	i++, j++;
	return mul(h[j] - h[i - 1] + MOD, p[SZ - i]);
}
void solve() {
	string s; cin >> s;
	sethash(s);
	int n = s.size(), ans = 0;
	int l[2], r[2];
	l[0] = r[0] = 0, l[1] = r[1] = n - 1;
	while (r[0] <= l[1]) {
		while (get(l[0], r[0]) != get(l[1], r[1]))
			r[0]++, l[1]--;
		if (r[0] < l[1]) {
			ans += 2;
			l[0] = r[0] = r[0] + 1;
			l[1] = r[1] = l[1] - 1;
		}
		else {
			ans += 1;
			break;
		}
	}
	cout << ans << "\n";
}
int main() {
	io();
	p[0] = 1;
	FOR(i, 1, SZ) p[i] = mul(p[i - 1], PRIME);
	int t; cin >> t;
	while (t--) solve();
}
# Verdict Execution time Memory Grader output
1 Correct 12 ms 8184 KB Output is correct
2 Correct 12 ms 8184 KB Output is correct
3 Correct 12 ms 8184 KB Output is correct
4 Correct 12 ms 8184 KB Output is correct
5 Correct 12 ms 8156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 8184 KB Output is correct
2 Correct 12 ms 8184 KB Output is correct
3 Correct 12 ms 8184 KB Output is correct
4 Correct 12 ms 8184 KB Output is correct
5 Correct 12 ms 8156 KB Output is correct
6 Correct 13 ms 8184 KB Output is correct
7 Correct 12 ms 8184 KB Output is correct
8 Correct 13 ms 8184 KB Output is correct
9 Correct 12 ms 8156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 8184 KB Output is correct
2 Correct 12 ms 8184 KB Output is correct
3 Correct 12 ms 8184 KB Output is correct
4 Correct 12 ms 8184 KB Output is correct
5 Correct 12 ms 8156 KB Output is correct
6 Correct 13 ms 8184 KB Output is correct
7 Correct 12 ms 8184 KB Output is correct
8 Correct 13 ms 8184 KB Output is correct
9 Correct 12 ms 8156 KB Output is correct
10 Correct 13 ms 8312 KB Output is correct
11 Correct 13 ms 8308 KB Output is correct
12 Correct 13 ms 8284 KB Output is correct
13 Correct 13 ms 8312 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 8184 KB Output is correct
2 Correct 12 ms 8184 KB Output is correct
3 Correct 12 ms 8184 KB Output is correct
4 Correct 12 ms 8184 KB Output is correct
5 Correct 12 ms 8156 KB Output is correct
6 Correct 13 ms 8184 KB Output is correct
7 Correct 12 ms 8184 KB Output is correct
8 Correct 13 ms 8184 KB Output is correct
9 Correct 12 ms 8156 KB Output is correct
10 Correct 13 ms 8312 KB Output is correct
11 Correct 13 ms 8308 KB Output is correct
12 Correct 13 ms 8284 KB Output is correct
13 Correct 13 ms 8312 KB Output is correct
14 Correct 113 ms 25400 KB Output is correct
15 Correct 69 ms 23448 KB Output is correct
16 Correct 100 ms 27572 KB Output is correct
17 Correct 112 ms 18956 KB Output is correct