답안 #724651

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
724651 2023-04-15T17:13:47 Z Charizard2021 Boarding Passes (BOI22_passes) C++17
100 / 100
348 ms 57940 KB
#include <bits/stdc++.h>
using namespace std;
long long counter1;
long long n;
vector<long long> val;
vector<vector<long long> > l, r;
vector<vector<vector<long long> > > l2, r2;
vector<vector<long long> > groups;
long long dpSolve2(long long already_boarded, long long next, long long split){
    long long ans = 0;
    for (long long t = 0; t < counter1; ++t) {
        long long tmp = l2[next][t][split] + r2[next][t][split];
        if (already_boarded & (1ll << t)) {
            ans += 2 * tmp;
        } else if (t == next) {
            ans += tmp;
        }
    }
    return ans;
}
long long dpSolve(long long already_boarded, long long next){
    long long low = 0, high = groups[next].size() + 1;
    while (high - low > 1) {
        long long mid1 = (high + low) / 2 - 1;
        long long mid2 = mid1 + 1;
        long long c1 = dpSolve2(already_boarded, next, mid1);
        long long c2 = dpSolve2(already_boarded, next, mid2);
        if (c1 < c2){
            high = mid2;
        }
        else{
            low = mid1 + 1;
        }
    }
    long long ans = dpSolve2(already_boarded, next, low);
    return ans;
}
long long calc_costs(){
    vector<long long> dp(1ll << counter1, 1e18);
    dp[0] = 0;
    for (long long i = 1; i < 1ll << counter1; ++i) {
        for (long long t = 0; t < counter1; ++t) {
            if (!(i & (1ll << t))) continue;
            long long parent = i & ~(1ll << t);
            dp[i] = min(dp[i], dp[parent] + dpSolve(parent, t));
        }
    }
    return dp[(1ll << counter1) - 1];
}
int main(){
    string s;
    cin >> s;
    n = s.size();
    map<char, char> types;
    for (char& c: s) {
        if (!types.count(c)) {
            char id = static_cast<char>(types.size());
            types[c] = id;
        }
        c = types[c];
    }
    counter1 = types.size();
    val.assign(counter1, 0);
    for (char c: s){
        val[c]++;
    }
    groups.resize(counter1);
    for (long long i = 0; i < n; ++i) {
        groups[s[i]].push_back(i);
    }

    l = r = vector<vector<long long> >(counter1, vector<long long>(n));
    vector<long long> tmp_cnt(counter1, 0);
    for (size_t i = 0; i < n; ++i) {
        for (size_t j = 0; j < counter1; ++j) {
            l[j][i] = tmp_cnt[j];
            r[j][i] = val[j] - tmp_cnt[j];
        }
        ++tmp_cnt[s[i]];
        --r[s[i]][i];
    }

    vector<vector<long long> > dpLeft, dpRight;
    dpLeft = dpRight = vector<vector<long long> >(counter1, vector<long long>(counter1, 0));
    l2 = r2 = vector<vector<vector<long long> > >(counter1, vector<vector<long long> >(counter1, {0}));
    for (long long i = 0; i < n; i++) {
        for (long long j = 0; j < counter1; ++j) {
            dpLeft[s[i]][j] += l[j][i];
            dpRight[s[n - i - 1]][j] += r[j][n - i - 1];
        }
        for (long long k = 0; k < counter1; ++k) {
            l2[s[i]][k].push_back(dpLeft[s[i]][k]);
            r2[s[n - i - 1]][k].push_back(dpRight[s[n - i - 1]][k]);
        }
    }
    for (long long i = 0; i < counter1; ++i) {
        for (long long j = 0; j < counter1; ++j) {
            reverse(r2[i][j].begin(), r2[i][j].end());
        }
    }
    long long ans = calc_costs();
    cout << ans / 2 << ((ans % 2) ? ".5" : "") << "\n";
}

Compilation message

passes.cpp: In function 'int main()':
passes.cpp:74:26: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   74 |     for (size_t i = 0; i < n; ++i) {
      |                        ~~^~~
passes.cpp:75:30: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   75 |         for (size_t j = 0; j < counter1; ++j) {
      |                            ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB found '100800.5000000000', expected '100800.5000000000', error '0.0000000000'
2 Correct 1 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
3 Correct 1 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
4 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
5 Correct 1 ms 340 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 9 ms 4704 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 11 ms 5212 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 11 ms 5904 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 10 ms 5816 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
2 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
3 Correct 1 ms 296 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
4 Correct 1 ms 300 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
5 Correct 1 ms 340 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
6 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
7 Correct 1 ms 340 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
8 Correct 1 ms 212 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
9 Correct 1 ms 212 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
10 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
11 Correct 1 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
12 Correct 1 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
13 Correct 1 ms 212 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
14 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
15 Correct 1 ms 304 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
16 Correct 1 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
17 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
2 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
3 Correct 1 ms 296 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
4 Correct 1 ms 300 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
5 Correct 1 ms 340 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
6 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
7 Correct 1 ms 340 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
8 Correct 1 ms 212 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
9 Correct 1 ms 212 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
10 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
11 Correct 1 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
12 Correct 1 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
13 Correct 1 ms 212 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
14 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
15 Correct 1 ms 304 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
16 Correct 1 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
17 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
18 Correct 1 ms 292 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
19 Correct 0 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
20 Correct 1 ms 340 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
21 Correct 1 ms 340 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
22 Correct 1 ms 340 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
23 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
24 Correct 1 ms 300 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
25 Correct 1 ms 212 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
26 Correct 1 ms 304 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
27 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
28 Correct 1 ms 304 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
29 Correct 1 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
30 Correct 1 ms 212 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
31 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
32 Correct 1 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
33 Correct 1 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
34 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
35 Correct 2 ms 852 KB found '12497500.0000000000', expected '12497500.0000000000', error '0.0000000000'
36 Correct 2 ms 820 KB found '12495000.5000000000', expected '12495000.5000000000', error '0.0000000000'
37 Correct 9 ms 4180 KB found '12223392.0000000000', expected '12223392.0000000000', error '0.0000000000'
38 Correct 7 ms 3540 KB found '2372500.0000000000', expected '2372500.0000000000', error '0.0000000000'
39 Correct 7 ms 4308 KB found '12475017.5000000000', expected '12475017.5000000000', error '0.0000000000'
40 Correct 8 ms 3608 KB found '10655706.0000000000', expected '10655706.0000000000', error '0.0000000000'
41 Correct 8 ms 4336 KB found '11977895.5000000000', expected '11977895.5000000000', error '0.0000000000'
42 Correct 8 ms 4124 KB found '11977865.0000000000', expected '11977865.0000000000', error '0.0000000000'
43 Correct 8 ms 4180 KB found '11977907.5000000000', expected '11977907.5000000000', error '0.0000000000'
44 Correct 8 ms 4108 KB found '11977808.0000000000', expected '11977808.0000000000', error '0.0000000000'
45 Correct 8 ms 4144 KB found '11977791.0000000000', expected '11977791.0000000000', error '0.0000000000'
46 Correct 8 ms 4272 KB found '11977871.5000000000', expected '11977871.5000000000', error '0.0000000000'
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB found '100800.5000000000', expected '100800.5000000000', error '0.0000000000'
2 Correct 1 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
3 Correct 1 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
4 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
5 Correct 1 ms 340 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 9 ms 4704 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 11 ms 5212 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 11 ms 5904 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 10 ms 5816 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
10 Correct 0 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
11 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
12 Correct 1 ms 296 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
13 Correct 1 ms 300 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
14 Correct 1 ms 340 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
15 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
16 Correct 1 ms 340 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
17 Correct 1 ms 212 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
18 Correct 1 ms 212 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
19 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
20 Correct 1 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
21 Correct 1 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
22 Correct 1 ms 212 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
23 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
24 Correct 1 ms 304 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
25 Correct 1 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
26 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
27 Correct 1 ms 292 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
28 Correct 0 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
29 Correct 1 ms 340 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
30 Correct 1 ms 340 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
31 Correct 1 ms 340 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
32 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
33 Correct 1 ms 300 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
34 Correct 1 ms 212 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
35 Correct 1 ms 304 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
36 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
37 Correct 1 ms 304 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
38 Correct 1 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
39 Correct 1 ms 212 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
40 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
41 Correct 1 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
42 Correct 1 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
43 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
44 Correct 2 ms 852 KB found '12497500.0000000000', expected '12497500.0000000000', error '0.0000000000'
45 Correct 2 ms 820 KB found '12495000.5000000000', expected '12495000.5000000000', error '0.0000000000'
46 Correct 9 ms 4180 KB found '12223392.0000000000', expected '12223392.0000000000', error '0.0000000000'
47 Correct 7 ms 3540 KB found '2372500.0000000000', expected '2372500.0000000000', error '0.0000000000'
48 Correct 7 ms 4308 KB found '12475017.5000000000', expected '12475017.5000000000', error '0.0000000000'
49 Correct 8 ms 3608 KB found '10655706.0000000000', expected '10655706.0000000000', error '0.0000000000'
50 Correct 8 ms 4336 KB found '11977895.5000000000', expected '11977895.5000000000', error '0.0000000000'
51 Correct 8 ms 4124 KB found '11977865.0000000000', expected '11977865.0000000000', error '0.0000000000'
52 Correct 8 ms 4180 KB found '11977907.5000000000', expected '11977907.5000000000', error '0.0000000000'
53 Correct 8 ms 4108 KB found '11977808.0000000000', expected '11977808.0000000000', error '0.0000000000'
54 Correct 8 ms 4144 KB found '11977791.0000000000', expected '11977791.0000000000', error '0.0000000000'
55 Correct 8 ms 4272 KB found '11977871.5000000000', expected '11977871.5000000000', error '0.0000000000'
56 Correct 1 ms 300 KB found '7.5000000000', expected '7.5000000000', error '0.0000000000'
57 Correct 52 ms 596 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
58 Correct 1 ms 340 KB found '100800.5000000000', expected '100800.5000000000', error '0.0000000000'
59 Correct 0 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
60 Correct 1 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
61 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
62 Correct 1 ms 340 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
63 Correct 9 ms 4768 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
64 Correct 10 ms 5096 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
65 Correct 11 ms 5888 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
66 Correct 10 ms 5816 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
67 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
68 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
69 Correct 1 ms 304 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
70 Correct 1 ms 340 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
71 Correct 1 ms 300 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
72 Correct 1 ms 212 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
73 Correct 1 ms 340 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
74 Correct 1 ms 340 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
75 Correct 1 ms 212 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
76 Correct 1 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
77 Correct 1 ms 300 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
78 Correct 1 ms 300 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
79 Correct 1 ms 300 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
80 Correct 1 ms 212 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
81 Correct 1 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
82 Correct 1 ms 300 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
83 Correct 1 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
84 Correct 2 ms 852 KB found '12497500.0000000000', expected '12497500.0000000000', error '0.0000000000'
85 Correct 1 ms 852 KB found '12495000.5000000000', expected '12495000.5000000000', error '0.0000000000'
86 Correct 8 ms 4180 KB found '12223392.0000000000', expected '12223392.0000000000', error '0.0000000000'
87 Correct 8 ms 3624 KB found '2372500.0000000000', expected '2372500.0000000000', error '0.0000000000'
88 Correct 8 ms 4308 KB found '12475017.5000000000', expected '12475017.5000000000', error '0.0000000000'
89 Correct 8 ms 3636 KB found '10655706.0000000000', expected '10655706.0000000000', error '0.0000000000'
90 Correct 8 ms 4308 KB found '11977895.5000000000', expected '11977895.5000000000', error '0.0000000000'
91 Correct 8 ms 4180 KB found '11977865.0000000000', expected '11977865.0000000000', error '0.0000000000'
92 Correct 8 ms 4180 KB found '11977907.5000000000', expected '11977907.5000000000', error '0.0000000000'
93 Correct 8 ms 4052 KB found '11977808.0000000000', expected '11977808.0000000000', error '0.0000000000'
94 Correct 8 ms 4180 KB found '11977791.0000000000', expected '11977791.0000000000', error '0.0000000000'
95 Correct 9 ms 4180 KB found '11977871.5000000000', expected '11977871.5000000000', error '0.0000000000'
96 Correct 301 ms 53948 KB found '1239972790.0000000000', expected '1239972790.0000000000', error '0.0000000000'
97 Correct 22 ms 468 KB found '128.0000000000', expected '128.0000000000', error '0.0000000000'
98 Correct 348 ms 52160 KB found '161053893.0000000000', expected '161053893.0000000000', error '0.0000000000'
99 Correct 140 ms 54504 KB found '1249625032.0000000000', expected '1249625032.0000000000', error '0.0000000000'
100 Correct 37 ms 596 KB found '10.5000000000', expected '10.5000000000', error '0.0000000000'
101 Correct 327 ms 53208 KB found '1095334900.0000000000', expected '1095334900.0000000000', error '0.0000000000'
102 Correct 296 ms 54484 KB found '1249723731.0000000000', expected '1249723731.0000000000', error '0.0000000000'
103 Correct 302 ms 54720 KB found '1239994164.5000000000', expected '1239994164.5000000000', error '0.0000000000'
104 Correct 292 ms 56352 KB found '1239994234.5000000000', expected '1239994234.5000000000', error '0.0000000000'
105 Correct 312 ms 54980 KB found '1239994121.0000000000', expected '1239994121.0000000000', error '0.0000000000'
106 Correct 305 ms 54720 KB found '1239994009.0000000000', expected '1239994009.0000000000', error '0.0000000000'
107 Correct 281 ms 54936 KB found '1239993860.5000000000', expected '1239993860.5000000000', error '0.0000000000'
108 Correct 179 ms 50368 KB found '1237107336.5000000000', expected '1237107336.5000000000', error '0.0000000000'
109 Correct 305 ms 57940 KB found '1239994062.5000000000', expected '1239994062.5000000000', error '0.0000000000'