#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 = 1e9 + 7;
int mult(int a, int b) {
return (a * b) % mod;
}
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 + (revs[j]-'a'+1) * pw[j]) + mod) % mod;
hashpre = ((hashpre + (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
savez.cpp: In function 'void solve()':
savez.cpp:63: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]
63 | for(int j = 0; j < sz(s); j++) {
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
14 ms |
15956 KB |
Output is correct |
2 |
Correct |
12 ms |
15996 KB |
Output is correct |
3 |
Incorrect |
12 ms |
15952 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
13 ms |
15952 KB |
Output is correct |
2 |
Correct |
13 ms |
15952 KB |
Output is correct |
3 |
Correct |
14 ms |
16016 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
15952 KB |
Output is correct |
2 |
Correct |
26 ms |
15952 KB |
Output is correct |
3 |
Correct |
31 ms |
16164 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
14 ms |
15952 KB |
Output is correct |
2 |
Correct |
30 ms |
16220 KB |
Output is correct |
3 |
Correct |
43 ms |
16208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
27 ms |
16220 KB |
Output is correct |
2 |
Correct |
25 ms |
16192 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
16376 KB |
Output is correct |
2 |
Correct |
23 ms |
16256 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
37 ms |
16208 KB |
Output is correct |
2 |
Correct |
23 ms |
16208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
26 ms |
16464 KB |
Output is correct |
2 |
Correct |
34 ms |
16464 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
17756 KB |
Output is correct |
2 |
Correct |
33 ms |
17744 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
56 ms |
19024 KB |
Output is correct |
2 |
Correct |
45 ms |
19024 KB |
Output is correct |
3 |
Correct |
67 ms |
23888 KB |
Output is correct |