Submission #1104439

# Submission time Handle Problem Language Result Execution time Memory
1104439 2024-10-23T19:09:33 Z qrn Savez (COCI15_savez) C++14
0 / 120
32 ms 4944 KB
#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 = 2e5 + 31;
const int base = 31;
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);
    dp[1] = 1;
    for(int i = 0; i < n; i++) {
        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), base)) % mod;
            hashpre = (hashpre + mult((s[j] - 'a' + 1), base)) % 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:68: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]
   68 |         for(int j = 0; j < sz(s); j++) {
      |                          ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1872 KB Output is correct
2 Incorrect 2 ms 1872 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 1872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 1872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 1872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 1872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 2128 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 21 ms 2128 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 17 ms 2552 KB Output is correct
2 Incorrect 15 ms 3408 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 3664 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 32 ms 4944 KB Output isn't correct
2 Halted 0 ms 0 KB -