Submission #492977

# Submission time Handle Problem Language Result Execution time Memory
492977 2021-12-09T21:32:28 Z MilosMilutinovic Palindromic Partitions (CEOI17_palindromic) C++14
100 / 100
181 ms 26684 KB
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}()); 
const ll mod=1000000007;
const ll p=6983;
int rnd(int x) { return mrand() % x;}
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
// head

const int N=1000005;
int n,_;
char s[N];
ll pw[N],hsh[N];

ll get(int l,int r) {
	ll hash=hsh[r]-(hsh[l]*pw[r-l])%mod;
	if (hash<0) hash+=mod;
	return hash;
}

bool check(int l,int r,int len) {
	return get(l-1,l+len-1)==get(r-len,r);
}

void solve() {
	scanf("%s",s+1);
	n=strlen(s+1);
	hsh[0]=0;
	pw[0]=1;
	rep(i,1,n+1) pw[i]=(pw[i-1]*p)%mod;
	rep(i,1,n+1) {
		hsh[i]=((hsh[i-1]*p)+s[i])%mod;
	}
	int l=1,r=n;
	int ans=0;
	while (l<=r) {
		if (l==r) {
			ans++;
			break;
		}
		if (l+1==r) {
			if (s[l]==s[r]) ans++;
			ans++;
			break;
		}
		int suc=1;
		rep(i,1,n) {
			if (l+i-1>=r-i+1) {
				suc=0;
				break;
			}
			if (check(l,r,i)) {
				ans+=2;
				l+=i,r-=i;
				break;
			}
		}
		if (!suc) {
			ans++;
			break;
		}
	}
	printf("%d\n",ans);
}

int main() {
	for (scanf("%d",&_);_;_--) {
		solve();
	}
}

Compilation message

palindromic.cpp: In function 'void solve()':
palindromic.cpp:39:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |  scanf("%s",s+1);
      |  ~~~~~^~~~~~~~~~
palindromic.cpp: In function 'int main()':
palindromic.cpp:80:12: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |  for (scanf("%d",&_);_;_--) {
      |       ~~~~~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 2 ms 460 KB Output is correct
11 Correct 2 ms 588 KB Output is correct
12 Correct 2 ms 576 KB Output is correct
13 Correct 2 ms 460 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 2 ms 460 KB Output is correct
11 Correct 2 ms 588 KB Output is correct
12 Correct 2 ms 576 KB Output is correct
13 Correct 2 ms 460 KB Output is correct
14 Correct 181 ms 26684 KB Output is correct
15 Correct 96 ms 22084 KB Output is correct
16 Correct 166 ms 26100 KB Output is correct
17 Correct 96 ms 14148 KB Output is correct