Submission #674212

# Submission time Handle Problem Language Result Execution time Memory
674212 2022-12-23T13:31:35 Z stanislavpolyn Boarding Passes (BOI22_passes) C++17
30 / 100
2000 ms 2576 KB
#include <bits/stdc++.h>

#define fr(i, a, b) for (int i = (a); i <= (b); ++i)
#define rf(i, a, b) for (int i = (a); i >= (b); --i)
#define fe(x, y) for (auto& x : y)

#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define mt make_tuple

#define all(x) (x).begin(), (x).end()
#define pw(x) (1LL << (x))
#define sz(x) (int)(x).size()

using namespace std;

mt19937_64 rng(228);

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
template <typename T>
using oset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define fbo find_by_order
#define ook order_of_key

template <typename T>
bool umn(T& a, T b) { return a > b ? a = b, 1 : 0; }
template <typename T>
bool umx(T& a, T b) { return a < b ? a = b, 1 : 0; }

using ll = long long;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template <typename T>
using ve = vector<T>;

string s;
ve<int> v[26];

int main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
    ios::sync_with_stdio(0);
    cin.tie(0);
#endif
    cin >> s;

//    fr (i, 1, 899) s.pb('A');

    fr (i, 0, sz(s) - 1) {
        v[s[i] - 'A'].pb(i);
    }

    ve<int> p;
    fr (i, 0, 25) {
        if (sz(v[i])) {
            p.pb(i);
        }
    }
    ld res = 1e18;
    ve<bool> act(sz(s));
    ve<int> P(sz(s));
    ve<int> S(sz(s));
    ve<int> SS(sz(s));
    ve<int> PP(sz(s));

    do {
        fill(all(act), 0);
        fill(all(P), 0);
        fill(all(PP), 0);
        fill(all(S), 0);
        fill(all(SS), 0);
        ld ans = 0;

        fe (x, p) {

            fr (i, 0, sz(v[x]) - 1) {
                PP[i] = P[v[x][i]];
                if (i > 0) PP[i] += PP[i - 1];
            }
            rf (i, sz(v[x]) - 1, 0) {
                SS[i] = S[v[x][i]];
                if (i + 1 < sz(v[x])) SS[i] += SS[i + 1];
            }

            ld best = 1e18;
//
//            {
//                ld now = 0;
//                fr (i, 0, sz(v[x]) - 1) {
//                    ld val1 = P[v[x][i]] + i * 0.5;
//                    ld val2 = S[v[x][i]] + (sz(v[x]) - 1 - i) * 0.5;
//                    now += min(val1, val2);
//                }
//                umn(best, now);
//            }

            fr (pref, 0, sz(v[x])) {
                ld now = 0;
                if (pref - 1 >= 0) now += PP[pref - 1];
                if (pref < sz(v[x])) now += SS[pref];
//                fr (i, 0, pref - 1) {
//                    now += P[v[x][i]];
//                }
//                fr (i, pref, sz(v[x]) - 1) {
//                    now += S[v[x][i]];
//                }

                now += ld(0.5) * pref * (pref - 1) / 2;
                int suff = sz(v[x]) - pref;
                now += ld(0.5) * suff * (suff - 1) / 2;

//                if (abs(now - 2) <= 1e-7) {
//                    cout << pref << " " << suff << "\n";
//                }

                umn(best, now);
            }
            fe (cur, v[x]) act[cur] = 1;

            fr (i, 0, sz(s) - 1) {
                P[i] = act[i];
                if (i > 0) P[i] += P[i - 1];
            }
            rf (i, sz(s) - 1, 0) {
                S[i] = act[i];
                if (i + 1 < sz(s)) {
                    S[i] += S[i + 1];
                }
            }
//            cout << "Add " << best << " " << char(x + 'A') << "\n";
            ans += best;
        }
//        cout << "\n";
        umn(res, ans);
    } while (next_permutation(all(p)));

    cout << fixed << setprecision(10) << res << "\n";

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB found '100800.5000000000', expected '100800.5000000000', error '0.0000000000'
2 Correct 0 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
3 Correct 0 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
4 Correct 0 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
5 Correct 0 ms 340 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 4 ms 2192 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 4 ms 2448 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 5 ms 2576 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 5 ms 2576 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
# Verdict Execution time Memory 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 26 ms 212 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
4 Correct 25 ms 212 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
5 Correct 26 ms 212 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
6 Correct 3 ms 328 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
7 Correct 22 ms 212 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 7 ms 320 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
10 Correct 9 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
11 Correct 8 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
12 Correct 8 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
13 Correct 7 ms 320 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
14 Correct 7 ms 316 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
15 Correct 7 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
16 Correct 7 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
17 Correct 9 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
# Verdict Execution time Memory 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 26 ms 212 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
4 Correct 25 ms 212 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
5 Correct 26 ms 212 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
6 Correct 3 ms 328 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
7 Correct 22 ms 212 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 7 ms 320 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
10 Correct 9 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
11 Correct 8 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
12 Correct 8 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
13 Correct 7 ms 320 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
14 Correct 7 ms 316 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
15 Correct 7 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
16 Correct 7 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
17 Correct 9 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
18 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
19 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
20 Correct 28 ms 304 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
21 Correct 25 ms 324 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
22 Correct 27 ms 212 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
23 Correct 3 ms 320 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
24 Correct 22 ms 320 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
25 Correct 2 ms 324 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
26 Correct 7 ms 324 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
27 Correct 7 ms 324 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
28 Correct 7 ms 328 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
29 Correct 7 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
30 Correct 7 ms 320 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
31 Correct 8 ms 324 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
32 Correct 7 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
33 Correct 7 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
34 Correct 8 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
35 Correct 1 ms 468 KB found '12497500.0000000000', expected '12497500.0000000000', error '0.0000000000'
36 Correct 1 ms 464 KB found '12495000.5000000000', expected '12495000.5000000000', error '0.0000000000'
37 Execution timed out 2061 ms 468 KB Time limit exceeded
38 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB found '100800.5000000000', expected '100800.5000000000', error '0.0000000000'
2 Correct 0 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
3 Correct 0 ms 212 KB found '0.0000000000', expected '0.0000000000', error '-0.0000000000'
4 Correct 0 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
5 Correct 0 ms 340 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 4 ms 2192 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 4 ms 2448 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 5 ms 2576 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 5 ms 2576 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 26 ms 212 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
13 Correct 25 ms 212 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
14 Correct 26 ms 212 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
15 Correct 3 ms 328 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
16 Correct 22 ms 212 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 7 ms 320 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
19 Correct 9 ms 212 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
20 Correct 8 ms 212 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
21 Correct 8 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
22 Correct 7 ms 320 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
23 Correct 7 ms 316 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
24 Correct 7 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
25 Correct 7 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
26 Correct 9 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
27 Correct 1 ms 212 KB found '1.0000000000', expected '1.0000000000', error '0.0000000000'
28 Correct 1 ms 212 KB found '1225.0000000000', expected '1225.0000000000', error '0.0000000000'
29 Correct 28 ms 304 KB found '1023.0000000000', expected '1023.0000000000', error '0.0000000000'
30 Correct 25 ms 324 KB found '294.0000000000', expected '294.0000000000', error '0.0000000000'
31 Correct 27 ms 212 KB found '1087.0000000000', expected '1087.0000000000', error '0.0000000000'
32 Correct 3 ms 320 KB found '1.5000000000', expected '1.5000000000', error '0.0000000000'
33 Correct 22 ms 320 KB found '703.0000000000', expected '703.0000000000', error '0.0000000000'
34 Correct 2 ms 324 KB found '55.5000000000', expected '55.5000000000', error '0.0000000000'
35 Correct 7 ms 324 KB found '56.0000000000', expected '56.0000000000', error '0.0000000000'
36 Correct 7 ms 324 KB found '45.0000000000', expected '45.0000000000', error '0.0000000000'
37 Correct 7 ms 328 KB found '66.5000000000', expected '66.5000000000', error '0.0000000000'
38 Correct 7 ms 212 KB found '67.0000000000', expected '67.0000000000', error '0.0000000000'
39 Correct 7 ms 320 KB found '66.0000000000', expected '66.0000000000', error '0.0000000000'
40 Correct 8 ms 324 KB found '47.0000000000', expected '47.0000000000', error '0.0000000000'
41 Correct 7 ms 212 KB found '50.0000000000', expected '50.0000000000', error '0.0000000000'
42 Correct 7 ms 212 KB found '49.0000000000', expected '49.0000000000', error '0.0000000000'
43 Correct 8 ms 212 KB found '57.0000000000', expected '57.0000000000', error '0.0000000000'
44 Correct 1 ms 468 KB found '12497500.0000000000', expected '12497500.0000000000', error '0.0000000000'
45 Correct 1 ms 464 KB found '12495000.5000000000', expected '12495000.5000000000', error '0.0000000000'
46 Execution timed out 2061 ms 468 KB Time limit exceeded
47 Halted 0 ms 0 KB -