Submission #937306

#TimeUsernameProblemLanguageResultExecution timeMemory
937306BidoTeimaSavez (COCI15_savez)C++17
120 / 120
73 ms22904 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 2e6 + 3; const ll mod = 1e18 + 3, base = 31; ll mul(ll a, ll b){ return (__int128(a) * b) % mod; } ll add(ll a, ll b){ return a + b >= mod ? a + b - mod : a + b; } int dp[N]; map<ll,int>idx{}; ll pw[N]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); pw[0] = 1; for(int i = 1; i < N; i++){ pw[i] = mul(pw[i - 1], base); } int n; cin>>n; for(int i = 0; i < n; i++){ dp[i] = 1; string s; cin>>s; string rv = s; reverse(rv.begin(), rv.end()); ll hashp = 0, hashs = 0; for(int j = 0; j < (int)s.size(); j++){ hashp = add(mul(hashp, base), s[j] - 'A' + 1); hashs = add(mul(pw[j], rv[j] - 'A' + 1), hashs); //cout<<hashp<<' '<<hashs<<'/'; if(hashp == hashs){ auto it = idx.find(hashp); if(it != idx.end()){ dp[i] = max(dp[i], dp[it->second] + 1); } } } idx[hashp] = i; //cout<<'\n'; } cout<<*max_element(dp, dp + n + 1); return 0; }
#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...