# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
555006 | 2022-04-29T21:24:47 Z | UncoolAnon | Copy and Paste 3 (JOI22_copypaste3) | C++14 | 2 ms | 380 KB |
#include <bits/stdc++.h> #define int long long using namespace std; const int inf=1e9*1e5; int n,a,b,c; string s; vector<int> z(string s) { int n = (int) s.length(); vector<int> z(n); for (int i = 1, l = 0, r = 0; i < n; ++i) { if (i <= r) z[i] = min (r - i + 1, z[i - l]); while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i]; if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1; } return z; } int solve(string s){ int n=s.size(); vector<int> p=z(s),dp(n,inf); vector<vector<int>> A(n+1); set<int> cur; for(int i=1;i<n;i++){ A[p[i]].push_back(i); cur.insert(i); } dp[0]=a; for(int i=0;i<n;i++){ for(int x:A[i]) cur.erase(x); if(i) dp[i]=min(dp[i],dp[i-1]+a); int mx=1; int last=i; while(1){ auto it = cur.lower_bound(last+1); if(it==cur.end()) break; last=*it+i; mx++; dp[last]=min(dp[last],dp[i]+b+c*mx+a*(last+1-mx*(i+1))); } } return dp.back(); } signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); freopen("in.txt","r",stdin); cin>>n>>s>>a>>b>>c; reverse(s.begin(),s.end()); int answer=a*n; for(int i=0;i<n;i++){ string ns; for(int j=i;j<n;j++)ns+=s[j]; answer=min(answer,solve(ns)+a*i); } cout << answer; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 340 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 380 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 340 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 340 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 340 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 340 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |