Submission #674206

# Submission time Handle Problem Language Result Execution time Memory
674206 2022-12-23T13:24:41 Z stanislavpolyn Boarding Passes (BOI22_passes) C++17
5 / 100
5 ms 2704 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);
        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;
            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 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 320 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 1 ms 328 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 4 ms 2272 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 4 ms 2576 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 4 ms 2696 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 5 ms 2704 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB 1st numbers differ - expected: '1.0000000000', found: '5.0000000000', error = '4.0000000000'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB 1st numbers differ - expected: '1.0000000000', found: '5.0000000000', error = '4.0000000000'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory 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 320 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 1 ms 328 KB found '124002.0000000000', expected '124002.0000000000', error '0.0000000000'
6 Correct 4 ms 2272 KB found '772893586.0000000000', expected '772893586.0000000000', error '0.0000000000'
7 Correct 4 ms 2576 KB found '1100977812.5000000000', expected '1100977812.5000000000', error '0.0000000000'
8 Correct 4 ms 2696 KB found '1249950000.5000000000', expected '1249950000.5000000000', error '0.0000000000'
9 Correct 5 ms 2704 KB found '1249975000.0000000000', expected '1249975000.0000000000', error '0.0000000000'
10 Incorrect 1 ms 212 KB 1st numbers differ - expected: '1.0000000000', found: '5.0000000000', error = '4.0000000000'
11 Halted 0 ms 0 KB -