Submission #1075587

#TimeUsernameProblemLanguageResultExecution timeMemory
1075587vjudge1Copy and Paste 3 (JOI22_copypaste3)C++17
100 / 100
306 ms74320 KiB
/* #pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,fma,bmi,bmi2,sse4.2,popcnt,lzcnt") */ #include <bits/stdc++.h> #define taskname "" #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define i64 long long #define isz(x) (int)x.size() using namespace std; const i64 oo = 1e18; vector<int> z_function(string s) { int n = isz(s); vector<int> z(n); int l = 0, r = 0; for (int i = 1; i < n; i++) { if (i < r) { z[i] = min(r - i, z[i - l]); } while (i + z[i] < n and s[z[i]] == s[i + z[i]]) { z[i]++; } if (i + z[i] > r) { l = i; r = i + z[i]; } } return z; } void solve() { int n; cin >> n; string s; cin >> s; i64 a, b, c; cin >> a >> b >> c; vector<vector<int>> nxt(n, vector<int>(n + 1)); for (int i = 0; i < n; ++i) { auto vec = z_function(s.substr(i, n - i)); int mx = 0; for (int j = i + 1; j <= n; ++j) { int nmx = min(j - i, vec[j - i]); while (mx < nmx) { ++mx; nxt[i][i + mx] = j; } } while (mx < n - i) { ++mx; nxt[i][i + mx] = n; } } vector<vector<i64>> dp(n, vector<i64>(n + 1, oo)); for (int i = 0; i < n; ++i) dp[i][i + 1] = a + b; for (int len = 1; len < n; ++len) { for (int l = 0; l <= n - len; ++l) { int r = l + len; if (l - 1 >= 0) dp[l - 1][r] = min(dp[l - 1][r], dp[l][r] + a); if (r + 1 <= n) dp[l][r + 1] = min(dp[l][r + 1], dp[l][r] + a); int cr = nxt[l][r] + len, cnt = 2; while (cr <= n) { dp[l][cr] = min(dp[l][cr], dp[l][r] + cnt * c + (cr - l - len * cnt) * a + b); cr = nxt[cr - len][cr] + len, ++cnt; } } } cout << dp[0][n] - b << endl; } signed main() { if (fopen("in.txt", "r")) { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); } ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; //cin >> t; while(t--) solve(); }

Compilation message (stderr)

copypaste3.cpp: In function 'int main()':
copypaste3.cpp:83:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   83 |         freopen("in.txt", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
copypaste3.cpp:84:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   84 |         freopen("out.txt", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...