Submission #580148

# Submission time Handle Problem Language Result Execution time Memory
580148 2022-06-20T16:09:44 Z Elias Boarding Passes (BOI22_passes) C++17
5 / 100
4 ms 3208 KB
#include <bits/stdc++.h>

#ifndef _DEBUG
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
#endif

using namespace std;

signed main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(false);

    string s;
    cin >> s;

    int n = s.size();
    int g = *max_element(s.begin(), s.end()) - 'A' + 1;

    vector<int> a(n);
    vector<vector<int>> pos(g);

    for (int i = 0; i < n; i++)
        pos[a[i] = s[i] - 'A'].push_back(i);

    vector<vector<int>> prefix(1 << g, vector<int>(n));
    vector<vector<int>> suffix(1 << g, vector<int>(n));

    for (int k = 0; k < 1 << g; k++)
    {
        for (int i = 1; i < n; i++)
            prefix[k][i] = prefix[k][i - 1] + bool(1 << a[i - 1] & k);
        for (int i = n - 2; i >= 0; i--)
            suffix[k][i] = suffix[k][i + 1] + bool(1 << a[i + 1] & k);
    }

    vector<double> dp(1 << g, 1e20);
    dp[0] = 0;

    for (int b = 1; b < 1 << g; b++)
    {
        for (int i = 0; i < g; i++)
        {
            if (!(b & (1 << i)))
                continue;

            double cost = 0;

            for (int p : pos[i])
            {
                cost += min(prefix[b][p] - 0.5 * prefix[(1 << i)][p], suffix[b][p] - 0.5 * suffix[(1 << i)][p]);
            }

            dp[b] = min(dp[b], dp[b ^ (1 << i)] + cost);
            break;
        }
    }

    cout << setprecision(15) << dp.back();
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 3 ms 2652 KB Output is correct
7 Correct 4 ms 3028 KB Output is correct
8 Correct 4 ms 3208 KB Output is correct
9 Correct 4 ms 3208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 1 ms 340 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 1 ms 340 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 3 ms 2652 KB Output is correct
7 Correct 4 ms 3028 KB Output is correct
8 Correct 4 ms 3208 KB Output is correct
9 Correct 4 ms 3208 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Incorrect 1 ms 340 KB Output isn't correct
13 Halted 0 ms 0 KB -