Submission #1104456

#TimeUsernameProblemLanguageResultExecution timeMemory
1104456qrnSavez (COCI15_savez)C++14
108 / 120
57 ms23888 KiB
#include <bits/stdc++.h> using namespace std; template<class ISqr, class T> ISqr& operator>>(ISqr& is, vector<T>& v) { for (auto& x : v) is >> x; return is; } #define SPEED \ ios_base::sync_with_stdio(0); \ cin.tie(NULL); \ cout.tie(NULL); template <typename T> void show(vector<T> &v) { for (T i : v) { cout << i << ' '; } cout << endl; } #define pb push_back #define ins insert #define fi first #define se second #define endl "\n" #define ALL(x) x.begin(), x.end() #define sz(x) x.size() #define int long long #define _ << " " << #define no cout << "No" << endl; #define yes cout << "Yes" << endl; #define impos cout << -1 << endl; #define vi vector<int> #define pii pair<int,int> #define vpii vector<pii> const int sz = 2e6 + 31; const int base = 47; const int mod = 1e18 + 3; int mult(int a, int b) { return (a * b) % mod; } int add(int a, int b) { return a + b >= mod ? (a + b - mod) : a + b; } map<int,int>idx; int pw[sz]; void solve() { pw[0] = 1; for(int i = 1; i < sz; i++) pw[i] = mult(pw[i-1], base); int n; cin >> n; vi dp(n + 1, 0); for(int i = 1; i <= n; i++) { dp[i] = 1; string s; cin >> s; reverse(ALL(s)); string revs = s; reverse(ALL(s)); int hashpre = 0, hashsuf = 0; for(int j = 0; j < sz(s); j++) { hashsuf = ((hashsuf + mult((revs[j] - 'a' + 1), pw[j])) + mod) % mod; hashpre = ((hashpre + mult((s[j] - 'a' + 1), pw[j])) + mod) % mod; // cout << hashsuf << " " << hashpre << endl; if(hashpre == hashsuf) { auto it = idx.find(hashpre); if(it == idx.end()) continue; dp[i] = max(dp[i], dp[it->se] + 1); // cout << dp[i] << " " << dp[it->se] << endl; } } idx[hashpre] = i; // s-in hash valuesini at } int ans = 0; for(int i = 1; i <= n; i++) ans = max(ans, dp[i]); cout << ans << endl; } signed main(){ SPEED; int t = 1; // cin >> t; for(int cs = 1; cs <= t; cs++) { solve(); } }

Compilation message (stderr)

savez.cpp: In function 'void solve()':
savez.cpp:66:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         for(int j = 0; j < sz(s); j++) {
      |                          ^
#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...