Submission #229924

#TimeUsernameProblemLanguageResultExecution timeMemory
229924mohamedsobhi777Rima (COCI17_rima)C++14
56 / 140
328 ms249888 KiB
#include<bits/stdc++.h> using namespace std ; const int N = 3e6 + 7 ; int n ; string ss[N] ; struct trie{ int nxt[N][27] ; int cnt[N] ; int t = 1 ; int dp[N][2] ; void add(string &add_ ){ int cur = 1 ; int sz = add_.size() ; for(int i = 0 ;i < sz ;i++ ){ int c = add_[i] - 'a' ; if(!nxt[cur][c])nxt[cur][c] = ++t ; cur = nxt[cur][c] ; } cnt[cur] ++ ; } int solve(int i , bool flag){ if(dp[i][flag]!=-1) return dp[i][flag] ; if(flag && !cnt[i]) return 0 ; int ret = 0 ; int kids = 0 ; for(int j = 0 ;j < 26 ;j ++){ kids +=cnt[nxt[i][j]] ; } for(int j = 0 ;j < 26 ; j++){ if(nxt[i][j]){ ret = max(ret , solve(nxt[i][j] , flag ) ) ; ret = max(ret , solve(nxt[i][j] , 1) + kids ) ; } } return dp[i][flag] =ret ; } } tr; int main(){ ios_base::sync_with_stdio(0) ; cin.tie(0) ; //freopen("in.in" , "r" , stdin) ; memset(tr.dp , -1 , sizeof tr.dp) ; cin>>n ; for(int i = 0 ; i < n ;i++){ string x ; cin>>x ; reverse( x .begin() , x.end()) ; tr.add(x) ; } int ans = max(tr.solve(1 , 0 ) , tr.solve(1 , 1)) ; cout<< ans; return 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...