Submission #701245

#TimeUsernameProblemLanguageResultExecution timeMemory
701245tamthegodRima (COCI17_rima)C++17
28 / 140
1091 ms35144 KiB
// Make the best become better // No room for laziness #include<bits/stdc++.h> #define int long long #define pb push_back #define fi first #define se second using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxN = 1e6 + 5; const int mod = (int)1e14 + 7; const ll oo = 1e18; int n; string s[maxN]; map<int, int> f; const int base = 2347; int dp[maxN]; void ReadInput() { cin >> n; for(int i=1; i<=n; i++) { cin >> s[i]; reverse(s[i].begin(), s[i].end()); s[i] = ' ' + s[i]; } sort(s + 1, s + n + 1, [](string p, string q) { return p.size() > q.size(); }); } int lcp(int i, int j) { int p = 1; while(p < s[i].size() && p < s[j].size() && s[i][p] == s[j][p]) p++; return p - 1; } void Solve() { for(int i=1; i<=n; i++) { dp[i] = 1; for(int j=i-1; j>=1; j--) if(lcp(i, j) >= s[i].size() - 2) dp[i] = max(dp[i], dp[j] + 1); // cout << s[i] << '\n'; }//return; cout << *max_element(dp + 1, dp + n + 1);return; int res = 0; for(int i=1; i<=n; i++) { int val = 0; for(int j=1; j<s[i].size(); j++) dp[j] = (dp[j - 1] * base + s[i][j]) % mod; val = max(f[dp[s[i].size() - 1]], f[dp[s[i].size() - 2]]); val++; f[dp[s[i].size() - 1]] = max(f[dp[s[i].size() - 1]], val); f[dp[s[i].size() - 2]] = max(f[dp[s[i].size() - 2]], val); res = max(res, val); cout << val << " "; } // cout << res; } int32_t main() { // freopen("sol.inp", "r", stdin); // freopen("sol.out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); ReadInput(); Solve(); } // 1 1 2 3 4 5 1 1 2 6 2 3 4 7 5 1 1 1 // 1 1 2 3 4 5 1 6 7 8 2 3 4 9 5 1 1 1

Compilation message (stderr)

rima.cpp: In function 'long long int lcp(long long int, long long int)':
rima.cpp:39:13: 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]
   39 |     while(p < s[i].size() && p < s[j].size() && s[i][p] == s[j][p]) p++;
      |           ~~^~~~~~~~~~~~~
rima.cpp:39:32: 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]
   39 |     while(p < s[i].size() && p < s[j].size() && s[i][p] == s[j][p]) p++;
      |                              ~~^~~~~~~~~~~~~
rima.cpp: In function 'void Solve()':
rima.cpp:48: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]
   48 |             if(lcp(i, j) >= s[i].size() - 2) dp[i] = max(dp[i], dp[j] + 1);
      |                ~~~~~~~~~~^~~~~~~~~~~~~~~~~~
rima.cpp:56:23: 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]
   56 |         for(int j=1; j<s[i].size(); j++)
      |                      ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...