Submission #418955

#TimeUsernameProblemLanguageResultExecution timeMemory
418955DymoPalindromes (APIO14_palindrome)C++14
47 / 100
1092 ms13372 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define ull long long #define pll pair<ll,ll> #define ff first #define ss second #define pb push_back //#define endl "\n" const ll maxn =1e6+5; const ll mod=988642507; const ll base=317; ull f[maxn]; ull fv[maxn]; ull mu[maxn]; ll n; ll cntnw=0; map<ull,ll> mp; ll cnt[maxn]; ll len[maxn]; ll nxt[maxn]; ll in[maxn]; bool add(ull val,ll len1) { if (!mp.count(val)) { cntnw++; len[cntnw]=len1; mp[val]=cntnw; return true; } return false; } ull get(ll l,ll r) { return ((f[r]-f[l-1]*mu[r-l+1])%mod+mod)%mod; } ull getv(ll l,ll r) { swap(l,r); l=n-l+1; r=n-r+1; return ((fv[r]-fv[l-1]*mu[r-l+1])%mod+mod)%mod; } bool chk(ll l,ll r) { ll len=(r-l+1)/2; if(get(r-len+1,r)==getv(l,l+len-1)) return true; return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); if (fopen("test.inp","r")) { freopen("test.inp","r",stdin); freopen("test.ans","w",stdout); } mu[0]=1; for (int i=1; i<maxn; i++) mu[i]=(mu[i-1]*base)%mod; string s; cin>> s; string t=s; n=s.length(); s=" "+ s; for (int i=1; i<=n; i++) { f[i]=(f[i-1]*base+s[i]-'a'+1)%mod; } reverse(t.begin(),t.end()); t=" "+t; for (int i=1; i<=n; i++) { fv[i]=(fv[i-1]*base+t[i]-'a'+1)%mod; } ll ans=0; for (ll len=1;len<=n;len++) { mp.clear(); for (int i=1;i+len-1<=n;i++) { if (chk(i,i+len-1)) { mp[get(i,i+len-1)]++; ans=max(ans,mp[get(i,i+len-1)]*len); } } } cout <<ans<<endl; }

Compilation message (stderr)

palindrome.cpp:6: warning: "ull" redefined
    6 | #define ull  long long
      | 
palindrome.cpp:5: note: this is the location of the previous definition
    5 | #define ull unsigned long long
      | 
palindrome.cpp: In function 'int main()':
palindrome.cpp:65:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |         freopen("test.inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
palindrome.cpp:66:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         freopen("test.ans","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...