Submission #988587

#TimeUsernameProblemLanguageResultExecution timeMemory
988587parlimoosPalindromic Partitions (CEOI17_palindromic)C++14
0 / 100
2 ms344 KiB
//Be Name KHODA #pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define pb push_back #define pp pop_back #define lb lower_bound #define ub upper_bound #define cl clear #define bg begin #define arr(x) array<int , x> #define endl '\n' bool isp[100000]; vector<int> mods , s; int inf[2][50] , t , n; int Sum(int a , int b , int mod){ int res = a + b; if(res > mod) return res - mod; if(res < 0) return res + mod; return res; } int Mul(int a , int b , int mod){ return (1ll * a * 1ll * b) % mod; } int Pow(int a , int b , int mod){ int res = 1; while(b){ if(b & 1) res = Mul(res , a , mod); a = Mul(a , a , mod) , b >>= 1; } return res; } void initMods(){ for(int i = 2 ; mods.empty() or (int)mods.size() < 50 ; i++){ if(isp[i]) continue; mods.pb(i); for(int j = i + i ; j < 100000 ; j += i) isp[j] = 1; } } arr(2) f(int l , int r){ int nm1 = 0 , nm2 = 0; fill(&inf[0][0] , &inf[1][50] , 0); for(int i1 = l , i2 = r ;; i1++ , i2--){ if(i1 >= i2) return {l , r}; for(int i = 0 ; i < 50 ; i++){ inf[0][i] = Mul(inf[0][i] , 26 , mods[i]); inf[0][i] = Sum(inf[0][i] , s[i1] % mods[i] , mods[i]); inf[1][i] = Sum(inf[1][i] , Mul(s[i2] , Pow(26 , r - i2 , mods[i]) , mods[i]) , mods[i]); } bool flg = 1; for(int i = 0 ; i < 50 ; i++) if(inf[0][i] != inf[1][i]) flg = 0; if(flg) return {i1 + 1 , i2 - 1}; } } int main(){ ios::sync_with_stdio(0); cin.tie(0); initMods(); cin >> t; for(int ii = 0 ; ii < t ; ii++){ s.cl(); string d; cin >> d; for(char c : d) s.pb(int(c - 'a')); int o = 0 , l = 0 , r = (int)s.size() - 1; while(true){ arr(2) d = f(l , r); if(d[0] == l and d[1] == r){ o++; break; } if(d[0] == d[1]){ o += 3; break; } l = d[0] , r = d[1] , o += 2; } cout << o << endl; } }

Compilation message (stderr)

palindromic.cpp: In function 'std::array<int, 2> f(int, int)':
palindromic.cpp:46:9: warning: unused variable 'nm1' [-Wunused-variable]
   46 |     int nm1 = 0 , nm2 = 0;
      |         ^~~
palindromic.cpp:46:19: warning: unused variable 'nm2' [-Wunused-variable]
   46 |     int nm1 = 0 , nm2 = 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...