# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
945187 | vjudge1 | Copy and Paste 3 (JOI22_copypaste3) | C++17 | 368 ms | 50000 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#include <cstring>
#define int long long
#warning That's the baby, that's not my baby
typedef long long ll;
const int NMAX = 2500 + 2;
const int mod = 1e9 + 7;
const int P = 37;
int hsh[NMAX + 1], nxt[NMAX + 1];
std::vector<int> v[NMAX + 1];
ll dp[NMAX + 1][NMAX + 1];
signed main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
int n;
std::cin >> n;
std::string s;
std::cin >> s;
s = '#' + s;
int A, B, C;
std::cin >> A >> B >> C;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
dp[i][j] = 1e18;
}
for(int j = i; j <= n; j++) {
dp[i][j] = (ll) (j - i + 1) * A;
}
}
for(int len = 1; len <= n; len++) {
std::vector<std::pair<int, int>> x;
for(int i = 1; i <= n - len + 1; i++) {
hsh[i] = ((ll) hsh[i] * P + (s[i + len - 1] - 'a' + 1)) % mod;
dp[i][i + len - 1] = std::min({dp[i][i + len - 1], dp[i + 1][i + len - 1] + A, dp[i][i + len - 2] + A});
x.push_back({hsh[i], i});
}
std::sort(x.begin(), x.end());
int cur = 0;
for(int i = 0; i < x.size(); i++) {
if(!i || x[i].first != x[i - 1].first) {
cur++;
}
v[cur].push_back(x[i].second);
}
for(int i = 1; i <= cur; i++) {
for(int j = (int)v[i].size() - 1; j >= 0; j--) {
int l = j + 1, r = v[i].size();
while(l < r) {
int mid = (l + r) / 2;
if(v[i][mid] >= v[i][j] + len) {
r = mid;
} else {
l = mid + 1;
}
}
nxt[j] = r;
}
for(int j = 0; j < (int) v[i].size(); j++) {
int cur = j, cnt = 0;
while(cur < (int) v[i].size()) {
int l = v[i][j], r = v[i][cur] + len - 1;
dp[l][r] = std::min(dp[l][r], (ll)(cnt + 1) * C + (ll)(r - l + 1 - (cnt + 1) * len) * A + B + dp[l][l + len - 1]);
cnt++;
int x = nxt[cur];
if(x == (int) v[i].size()) {
break;
}
cur = x;
}
}
v[i].clear();
}
}
std::cout << dp[1][n];
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |