Submission #225667

#TimeUsernameProblemLanguageResultExecution timeMemory
225667johuthaIce Hockey World Championship (CEOI15_bobek)C++17
100 / 100
228 ms20840 KiB
#include <iostream>
#include <vector>
#include <algorithm>

#define int int64_t

using namespace std;

struct solver
{
    int n, m;
    vector<int> vals;
    vector<int> possh1;
    vector<int> possh2;

    vector<int> gethalf(int l, int r)
    {
        vector<int> res = {0};

        for (int i = l; i < r; i++)
        {
            int cs = res.size();
            for (int j = 0; j < cs; j++)
            {
                res.push_back(res[j] + vals[i]);
            }
        }
        return res;
    }

    int solve()
    {
        possh1 = gethalf(0, n / 2);
        possh2 = gethalf(n / 2, n);

        sort(possh1.begin(), possh1.end());
        sort(possh2.begin(), possh2.end());

        int res = 0;

        int rp = possh2.size();
        for (int lp = 0; lp < (int)possh1.size(); lp++)
        {
            while (rp > 0 && possh2[rp - 1] + possh1[lp] > m) rp--;
            res += rp;
        }
        return res;
    }
};

signed main()
{
    int n, m;
    solver s;
    cin >> n >> m;
    s.n = n; s.m = m;

    s.vals.resize(n);
    for (int i = 0; i < n; i++) cin >> s.vals[i];

    cout << s.solve() << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...