Submission #318437

# Submission time Handle Problem Language Result Execution time Memory
318437 2020-11-01T19:40:45 Z soroush Palindromic Partitions (CEOI17_palindromic) C++14
100 / 100
552 ms 35772 KB
/*
#pragma GCC optimize("O2")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx,avx2,sse,sse2,fma,tune=native")
//*/
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int  ,int > pii;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const ll maxn  = 3e6;
const ll mod =1e9+7;
const ll mods [] = {(ll)1e9+7 , (ll)1e9+9 , 696969569 , 177013 , 9699691};
const ld PI = acos((ld)-1);

#define pb push_back
#define endl '\n'
#define dokme(x) cout << x , exit(0)
#define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define ms(x , y) memset(x , y , sizeof x)
ll pw(ll a, ll b, ll md = mod){ll res = 1;while(b){if(b&1){res=(a*res)%md;}a=(a*a)%md;b>>=1;}return(res);}

struct hsh{
	string s;
	ll n;
	vector < ll > h;
	vector < ll > p;
	ll base;
	ll mod;
	hsh (string S){
		s = S;
		n = s.size();
		h.reserve(n+100);
		base = rng()%100 + 50;
		mod = mods[rng()%5];
		p.pb(1);
		for(int i = 1 ; i < n + 50 ; i ++)
			p.pb((p.back() * base)%mod);
	}
	void calc(){
		ll cur = 0;
		h.pb(cur);
		for(int i = 0 ; i < n ; i ++){
			cur = (cur * base)%mod;
			cur += s[i] - 'a' + 1;
			cur%=mod;
			h.pb(cur);
		}
	}
	ll get(ll l , ll r){
		ll res = h[r];
		res -= (h[l-1]*p[r-l+1])%mod;
		res%=mod;
		res+=mod;
		return(res%mod);
	}
};

int t;
string s;

int32_t main(){
    migmig;
	cin >> t;
	while(t -- ){
		cin >> s;
		hsh h(s);
		h.calc();
		int n = s.size();
		int l = 1 , r = n ;
		int ans = 0;
		int sum = 0;
		while (r > l){
			bool ok = 0;
			for(int i = l ; i < r ; i ++){
				if(i >= r-i+l)
					break;
				if(h.get(l , i) == h.get(r - i+l , r)){
					ans += 2;
					r = r - i + l-1;
					l = i+1;
					sum = 2*i
;					ok = 1;
					break;
				}
			}
			if(!ok)
				ans ++ , l = r , sum = 2*l;
		}
		if(sum < n)ans++;
		
		cout << ans << endl;
	}




    return(0);
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 6 ms 828 KB Output is correct
11 Correct 3 ms 748 KB Output is correct
12 Correct 6 ms 832 KB Output is correct
13 Correct 5 ms 744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 6 ms 828 KB Output is correct
11 Correct 3 ms 748 KB Output is correct
12 Correct 6 ms 832 KB Output is correct
13 Correct 5 ms 744 KB Output is correct
14 Correct 552 ms 35772 KB Output is correct
15 Correct 298 ms 31280 KB Output is correct
16 Correct 540 ms 31920 KB Output is correct
17 Correct 309 ms 23408 KB Output is correct