Submission #1028101

#TimeUsernameProblemLanguageResultExecution timeMemory
1028101earlyamazonSavez (COCI15_savez)C++14
120 / 120
64 ms17916 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int mn = 2e6+7; const int mod1 = 1e9+7; const int mod2 = 1e9+9; const int p1 = 269; const int p2 = 271; int32_t n,wyn; map<int32_t, int32_t> dp; int pot[mn]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(); cin>>n; pot[0] = 1; for (int i = 1; i < mn; i++){ pot[i] = pot[i-1]*p1%mod1; } string s; vector<int> hpref; for (int i = 0; i < n; i++){ hpref.clear(); cin>>s; hpref.resize(s.size()+1); hpref[0] = 0; for (int j = 1; j <= (int)s.size(); j++){ hpref[j] = (hpref[j-1]*p1+s[j-1])%mod1; } int32_t mx = 0; for (int j = 1; j <= (int)s.size(); j++){ int h = hpref[j]; if (dp.count(h)){ if (h == (hpref[s.size()]-((hpref[s.size()-j]*pot[j])%mod1)+mod1)%mod1){ mx = max(mx, dp[h]); } } } mx++; wyn = max(wyn, mx); dp[hpref.back()] = mx; // cout<<hpref[i].size()<<" "<<hpref[i].back().first<<" "<<hpref[i].back().second<<" "<<mx<<"\n"; } cout<<wyn<<"\n"; }
#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...
#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...