제출 #1300468

#제출 시각아이디문제언어결과실행 시간메모리
1300468uranhishigPalindromic Partitions (CEOI17_palindromic)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(a) (a).begin(),(a).end() #define rep(i, n) for(int i = 0; i < (n); i++) const int mod = 1000000007; int h1 = 31; int h2 = 43; signed main(){ int t; cin >> t; while(t--){ string s; cin >> s; int n = s.size(); string l,r; int s1 = 0; int s2 = 0; int ss1 = 0; int ss2 = 0; int m1[n + 1]; int m2[n + 1]; m1[0] = 1; m2[0] = 1; int x = 0; for (int i = 1; i <= n; i++) { m1[i] =( m1[i-1]*31+mod)%mod; m2[i] = ( m2[i-1]*43+mod)%mod; } int ans = 0; for (int i = 0; i < n/2; i++) { s1 = (s1*31 + (s[i]-'a'))%mod; s2 = (m1[x]*(s[n-1-i]-'a') + s2)%mod; ss1 = (ss1*43 + (s[i]-'a'))%mod; ss2 = (m2[x]*(s[n-1-i]-'a') + ss2)%mod; // cout <<s[i]-'a'<<" "<< s1 << ' ' << s2 << endl; x++; if(s1 == s2 and ss1 == ss2){ ans+=2; x=0; s1 = 0; s2 = 0; ss1 = 0; ss2 = 0; } } if((s1!=0 and s2!=0)||n%2 ){ ans++; } cout << ans << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...