제출 #593518

#제출 시각아이디문제언어결과실행 시간메모리
593518BlueShark_14회문 (APIO14_palindrome)C++14
100 / 100
57 ms69140 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; #define pb push_back #define ll long long #define forn(i,n) for(int i=0; i<(int)n; i++) #define forn1(i,n) for(int i=1; i<=(int)n; i++) #define sfd(a) scanf("%d", &a) #define sffd(a,b) scanf("%d%d", &a, &b) #define sffl(a,b) scanf("%lld%lld", &a,&b) #define sfl(a) scanf("%lld", &a) #define pii pair<int , int> #define pll pair<ll , ll> #define ff first #define ss second #define mem(a, val) memset(a, val, sizeof(a)) #define all(x) (x).begin(), (x).end() //#define mx 200005 #define INF_mx 1e18 #define gcd(a,b) __gcd(a, b) #define lcm(a,b) (a*b)/__gcd(a,b) #define PRINT cout<<"hi"<<endl #define PI acos(-1) #define fast_in_out ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define Q int q; cin>>q; while(q--) /* const ll sz=1000001; const ll N=1e12; vector<ll>prime; bool flag[sz+3]; void sieve(void) { ll i,j,add; flag[0]=flag[1]=1; prime.push_back(2); for(i=4; i<sz; i+=2) flag[i]=1; for(i=3; i<sz; i+=2) { if(!flag[i]) { prime.push_back(i); if(sz/i>=i) { add=i*2; for(j=i*i; j<sz; j+=add) flag[j]=1; } } } } */ /* const int MOD = 1000000007 ; long long int bigmod ( long long B, int P, int M ) { if ( P == 0 )return 1; if ( P % 2 ) { return ( ( B % M ) * ( bigmod ( B, P-1, M))) % M; } else { long long mod = bigmod (B,P/2,M); return ((mod%M)*(mod%M))%M; } } */ /* tree< int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>t; */ const ll N = 3e5 + 10 ; ll Tree[N][26], idx; ll len[N], link[N], t; string s; ll occ[N]; void pre_set(){ len[1] = -1, link[1] = 1; len[2] = 0, link[2] = 1; idx = t = 2 ; mem(occ, 0); } void extend(int p) { while(s[p - len[t] - 1 ] != s[p]) t = link[t]; int x = link[t]; while(s[p - len[x] -1] != s[p] ) x = link[x]; int c = s[p] - 'a'; if(!Tree[t][c]){ Tree[t][c] = ++idx; len[idx] = len[t]+2; link[idx] = len[idx] == 1 ? 2 : Tree[x][c]; } t = Tree[t][c]; occ[t]++; } int main() { fast_in_out cin>>s; pre_set(); for(int i=0; i<s.size(); i++){ extend(i); } for(int i=idx; i>2 ;i--){ occ[link[i]]+=occ[i]; } ll mx=0; for(int i=idx; i>2; i--){ if(occ[i]*len[i] > mx ) mx = occ[i] * len[i]; } cout << mx << endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

palindrome.cpp: In function 'int main()':
palindrome.cpp:134:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  134 |      for(int i=0; i<s.size(); i++){
      |                   ~^~~~~~~~~
#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...