Submission #1190048

#TimeUsernameProblemLanguageResultExecution timeMemory
1190048crafticatKitchen (BOI19_kitchen)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>

using namespace std;
#define F0R(i, n) for (ll i = 0; i < n;i++)
#define FOR(i, j, n) for(ll i = j; i < n;i++)

using ll =long long;
template<typename T>
using V = vector<T>;
using vi = V<ll>;

constexpr ll INF = 1e9;

ll eval(ll n, ll m, ll k, vi a, vi b) {
    ll sumB = 0, sumA = 0;

    for (auto x : b)
        sumB += x;
    for (auto x : a)
        sumA += x;

    F0R(i, m) {
        if (b[i] < k) {
            return -1;
        }
    }

    ll BOUND = max(sumB, sumA) + 1;
    auto dp(V<vi>(BOUND,vi(k + 1,-INF)));

    dp[0][0] = 0;
    FOR(i, 1, n + 1) {
        auto newDp = dp;

        FOR(j, 1, BOUND) {
            FOR(t, 0, k + 1) {
                if (j - a[i - 1] < 0) continue;

                ll oldSum = j - a[i - 1];
                if (t > 0 && dp[oldSum][t - 1] + a[i - 1] >= m)
                    newDp[j][t] = max(newDp[j][t], 0);

                newDp[j][t] = max(newDp[j][t], dp[oldSum][t] + a[i - 1]);
            }
        }

        dp = newDp;
    }

    FOR(i, sumB, BOUND) {
        if (dp[i][k] >= 0) {
            return i - sumB;
        }
    }

    return -1;
}

ll eval2(ll n, ll m, ll k, vi a, vi b) {
    ll sumB = 0, sumA = 0;

    for (auto x : b)
        sumB += x;
    for (auto x : a)
        sumA += x;

    F0R(i, m) {
        if (b[i] < k) {
            return -1;
        }
    }

    ll BOUND = max(sumB, sumA) + 1;
    vi dp(BOUND, -INF);
    dp[0] = 0;

    F0R(i, n) {
        vi newDp = dp;

        F0R(j, BOUND) {
            if (j - a[i] >= 0) newDp[j] = max( dp[j - a[i]], dp[j]);
        }

        dp = newDp;
    }

    FOR(i, sumB, BOUND) {
        if (dp[i] >= 0) {
            return i - sumB;
        }
    }


    return -1;
}

#ifndef DEBUG
int main() {
    ll n, m, k; cin >> n >> m >> k;

    vi a(n), b(m);

    F0R(i, n)
        cin >> a[i];
    F0R(i, m)
        cin >> b[i];
    swap(a, b);
    swap(m, n);

    ll res =  eval(n, m, k, a, b);
    if (res == -1)
        cout << "Impossible\n";
    else
        cout << res << "\n";
}
#endif
#if DEBUG
ll rand(ll a, ll b) {
    return a + rand() % (b - a + 1);
}

ll main() {
    ll test = 0;
    while (1) {
        test++;
        ll n = rand(1 ,50), m = rand(1, 50), k = 1;

        vi a(n), b(m);

        F0R(i, n)
            a[i] = rand(1, 50);
        F0R(i, m)
            b[i] = rand(1, 50);
        swap(a, b);
        swap(m, n);

        ll v1 = eval(n, m, k, a, b);
        ll v2 = eval2(n, m, k, a, b);

        if (v1 != v2) {
            ll stop = 25;
            eval2(n, m, k, a, b);
            eval(n, m, k, a, b);
        } else {
            cout << "succ";
        }
    }
}
#endif

Compilation message (stderr)

kitchen.cpp: In function 'll eval(ll, ll, ll, vi, vi)':
kitchen.cpp:41:38: error: no matching function for call to 'max(__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type&, int)'
   41 |                     newDp[j][t] = max(newDp[j][t], 0);
      |                                   ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from kitchen.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:254:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  254 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:254:5: note:   template argument deduction/substitution failed:
kitchen.cpp:41:38: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   41 |                     newDp[j][t] = max(newDp[j][t], 0);
      |                                   ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from kitchen.cpp:1:
/usr/include/c++/11/bits/stl_algobase.h:300:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  300 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:300:5: note:   template argument deduction/substitution failed:
kitchen.cpp:41:38: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
   41 |                     newDp[j][t] = max(newDp[j][t], 0);
      |                                   ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from kitchen.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3461:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)'
 3461 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3461:5: note:   template argument deduction/substitution failed:
kitchen.cpp:41:38: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   41 |                     newDp[j][t] = max(newDp[j][t], 0);
      |                                   ~~~^~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from kitchen.cpp:1:
/usr/include/c++/11/bits/stl_algo.h:3467:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)'
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3467:5: note:   template argument deduction/substitution failed:
kitchen.cpp:41:38: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   41 |                     newDp[j][t] = max(newDp[j][t], 0);
      |                                   ~~~^~~~~~~~~~~~~~~~