답안 #1059553

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1059553 2024-08-15T05:15:04 Z vjudge1 Copy and Paste 3 (JOI22_copypaste3) C++17
15 / 100
3000 ms 49768 KB
#include <bits/stdc++.h>

using namespace std;
    
typedef long long ll;
const int  N = 2500 + 2, MOD = 998244353;

#define int ll
ll binpow(ll a,ll b) {
    ll ret = 1,k = a;
    while(b) {
        if(b & 1) {
            ret *= k;
            ret %= MOD;
        }
        k *= k;
        k%=MOD;
        b /= 2;
    }
    return ret;
}
string s;
ll a,b,c,h[N],p = 167,inv[N];
map<int,ll> mem;
int get(int l,int r) {
    ll val = h[r];
    if(l) {
        val -= h[l - 1];
    }
    if(val < 0) val += MOD;
    val = val * inv[l]%MOD;
    return val;
}
ll solve(int l,int r) {
    if(r == l) {
        return a;
    }
    int t = get(l,r);
    // if(mem.count(t)) {
    //     return mem[t];
    // }
    vector<array<int,3>> x;
    int mx = (r - l + 1);
    for(int i = l;i <= r;i++) {
        for(int j = i;j <= min(r,i+mx-1);j++) {
            // cout << l << ' ' << r << ' ' << i << ' ' << j << '\n';
            x.push_back({get(i,j),i,j});
        }
    }
    sort(x.begin(),x.end());
    ll res = (r - l + 1) * 1ll * a;
    int n = (r - l + 1);
    for(int i  = 0;i < (int)x.size();) {
        int j = i;
        while(j < (int)x.size() && x[i][0] == x[j][0]) {
            j++;
        }
        int mn = -1,col = 0;
        for(int k = i;k < j;k++) {
            if(x[k][1] > mn) {
                mn = x[k][2];
                col++;
            }
        }
        int sz = (x[i][2] - x[i][1] + 1);
        if(col == 1) {
            i = j;
            continue;
        }
        ll val = solve(x[i][1],x[i][2]) + (n - sz * 1ll * col) * 1ll * a + (col - 1) * c + b + c;
        res = min(res,val);
        i = j;
    }
    return mem[t] = res;
}
int n;
void test() {
    cin >> n >> s >> a >> b >> c;
    ll x = 1;
    for(int i = 0;i < n;i++) {
        h[i] = x * 1ll * (s[i] - 'a' + 1)%MOD;
        if(i) h[i] += h[i - 1];
        if(h[i] >= MOD) h[i] -= MOD;
        inv[i] = binpow(x,MOD-2);
        x = x * 1ll * p%MOD;
    }
    cout << solve(0,n-1);
}
signed main() {
    ios_base::sync_with_stdio(false);cin.tie(0);
    int t = 1; 
    // cin >> t;
    while(t--) {
        test();
    }
}  
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 600 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Execution timed out 3096 ms 49768 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 344 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 360 KB Output is correct
23 Correct 0 ms 360 KB Output is correct
24 Correct 0 ms 360 KB Output is correct
25 Correct 0 ms 472 KB Output is correct
26 Correct 0 ms 360 KB Output is correct
27 Correct 0 ms 360 KB Output is correct
28 Correct 1 ms 360 KB Output is correct
29 Correct 0 ms 360 KB Output is correct
30 Correct 0 ms 360 KB Output is correct
31 Correct 0 ms 360 KB Output is correct
32 Correct 1 ms 360 KB Output is correct
33 Correct 0 ms 360 KB Output is correct
34 Correct 0 ms 360 KB Output is correct
35 Correct 0 ms 360 KB Output is correct
36 Correct 0 ms 408 KB Output is correct
37 Correct 0 ms 348 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 344 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 360 KB Output is correct
23 Correct 0 ms 360 KB Output is correct
24 Correct 0 ms 360 KB Output is correct
25 Correct 0 ms 472 KB Output is correct
26 Correct 0 ms 360 KB Output is correct
27 Correct 0 ms 360 KB Output is correct
28 Correct 1 ms 360 KB Output is correct
29 Correct 0 ms 360 KB Output is correct
30 Correct 0 ms 360 KB Output is correct
31 Correct 0 ms 360 KB Output is correct
32 Correct 1 ms 360 KB Output is correct
33 Correct 0 ms 360 KB Output is correct
34 Correct 0 ms 360 KB Output is correct
35 Correct 0 ms 360 KB Output is correct
36 Correct 0 ms 408 KB Output is correct
37 Correct 0 ms 348 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 0 ms 348 KB Output is correct
40 Correct 1 ms 600 KB Output is correct
41 Correct 107 ms 1368 KB Output is correct
42 Correct 3 ms 1368 KB Output is correct
43 Correct 3 ms 1276 KB Output is correct
44 Correct 2 ms 1368 KB Output is correct
45 Correct 2 ms 1368 KB Output is correct
46 Correct 3 ms 1368 KB Output is correct
47 Execution timed out 3066 ms 1368 KB Time limit exceeded
48 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 344 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
13 Correct 0 ms 344 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 360 KB Output is correct
23 Correct 0 ms 360 KB Output is correct
24 Correct 0 ms 360 KB Output is correct
25 Correct 0 ms 472 KB Output is correct
26 Correct 0 ms 360 KB Output is correct
27 Correct 0 ms 360 KB Output is correct
28 Correct 1 ms 360 KB Output is correct
29 Correct 0 ms 360 KB Output is correct
30 Correct 0 ms 360 KB Output is correct
31 Correct 0 ms 360 KB Output is correct
32 Correct 1 ms 360 KB Output is correct
33 Correct 0 ms 360 KB Output is correct
34 Correct 0 ms 360 KB Output is correct
35 Correct 0 ms 360 KB Output is correct
36 Correct 0 ms 408 KB Output is correct
37 Correct 0 ms 348 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 0 ms 348 KB Output is correct
40 Correct 1 ms 600 KB Output is correct
41 Correct 107 ms 1368 KB Output is correct
42 Correct 3 ms 1368 KB Output is correct
43 Correct 3 ms 1276 KB Output is correct
44 Correct 2 ms 1368 KB Output is correct
45 Correct 2 ms 1368 KB Output is correct
46 Correct 3 ms 1368 KB Output is correct
47 Execution timed out 3066 ms 1368 KB Time limit exceeded
48 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 600 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Execution timed out 3096 ms 49768 KB Time limit exceeded
14 Halted 0 ms 0 KB -