Submission #433551

#TimeUsernameProblemLanguageResultExecution timeMemory
433551misirPalindromes (APIO14_palindrome)C++14
0 / 100
42 ms68684 KiB
#include <bits/stdc++.h> using namespace std; #define INF 1<<30 #define endl '\n' #define maxn 100005 #define tc prllf("Case %d: ", cs) #define tcn prllf("Case %d:\n", cs); #define FASTIO ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); typedef long long ll; const double PI = acos(-1.0); #define si(x) scanf("%d",&x) #define sii(x,y) scanf("%d %d",&x,&y) #define siii(x,y,z) scanf("%d %d %d",&x,&y,&z) #define sl(x) scanf("%lld",&x) #define sll(x,y) scanf("%lld %lld",&x,&y) #define slll(x,y,z) scanf("%lld %lld %lld",&x,&y,&z) #define ss(ch) scanf("%s",ch) #define pi(x) printf("%d",x) #define pii(x,y) printf("%d %d",x,y) #define piii(x,y,z) printf("%d %d %d",x,y,z) #define pl(x) printf("%lld",x) #define pll(x,y) printf("%lld %lld",x,y) #define plll(x,y,z) printf("%lld %lld %lld",x,y,z) #define ps(ch) printf("%s",ch) #define F(i,a,b) for(int i= a; i <= b; i++) #define R(i,b,a) for(int i= b; i >= a; i--) #define REP(i,n) for(int i = 0; i < (n); i++) #define sline(a) scanf("%[^\n]s",a) #define Case(t) printf("Case %d:\n",t) const ll N = 300005; ll idx, t; ll link[N]; ll len[N]; ll tr[N][26]; // string s; char s[N]; ll occ[N]; void initTree() { memset(tr, 0, sizeof tr); memset(link, 0, sizeof link); memset(len, 0, sizeof len); len[1] = -1; link[1] = 1; len[2] = 0; link[2] = 1; idx = 2; t = 2; } void addletter(ll pos) { while (s[pos - len[t] - 1] != s[pos]) t = link[t]; ll x = link[t]; while (s[pos - len[x] - 1] != s[pos]) x = link[x]; ll c = s[pos] - 'a'; if (!tr[t][c]) { tr[t][c] = ++idx; len[idx] = len[t] + 2; link[idx] = len[idx] == 1 ? 2 : tr[x][c]; } t = tr[t][c]; occ[t]++; } //https://vjudge.net/problem/HDU-3948 int main() { /* #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); freopen("error.txt", "w", stderr); #endif //*/ // ll T; // scanf("%d", &T); // T = 1; // for (ll cs = 1; cs <= T; cs++) { initTree(); // cin >> s; // s = ' ' + s; // ll n = s.size(); scanf("%s", s); int n = strlen(s); // cerr << n << "\n"; char last; for (int i = 0; i < n - 1; i++) { last = s[i + 1]; s[i + 1] = s[i]; } s[n] = last; s[0] = ' '; // cerr << n << "\n"; for (ll i = 1; i <= n; i++) { // cerr << s[i] << "\n"; addletter(i); } // prllf("Case #%d: %d\n", cs, idx - 2); // } // for (ll i = idx; i > 2; i--) ll ans = 0; for (ll i = idx; i > 2; i--) { occ[link[i]] += occ[i]; ans = max(ans, len[i] * occ[i]); } // cout << ans << "\n"; pl(ans); printf("\n"); return 0; }

Compilation message (stderr)

palindrome.cpp: In function 'int main()':
palindrome.cpp:91:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |     scanf("%s", s);
      |     ~~~~~^~~~~~~~~
palindrome.cpp:99:10: warning: 'last' may be used uninitialized in this function [-Wmaybe-uninitialized]
   99 |     s[n] = last;
      |     ~~~~~^~~~~~
#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...