제출 #1337221

#제출 시각아이디문제언어결과실행 시간메모리
1337221top1svtinKitchen (BOI19_kitchen)C++17
21 / 100
6 ms836 KiB
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("inline")

#include <bits/stdc++.h>

using namespace std;

#define kien long long
#define pb push_back
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define pii pair<int, int>
#define dembit(a) __builtin_popcountll(a)
#define task "a"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define debug(x) cout << x << " ";
#define down cout << "\n"
const kien MOD = 1e9 + 7;
const int NTEST = 100;
const int Million = 1e6 + 5;
const int MXN = 1e5 + 5;
mt19937 rd(chrono::high_resolution_clock::now().time_since_epoch().count());
kien rand(kien l, kien r) {
    assert(l <= r);
    return uniform_int_distribution<kien>(l, r)(rd);
}

kien n, k, m, dem, b[MXN + 5], u, v, a[1000000], pre[305];
kien maxx, minn, vtr, l, r, ans, dp[305 * 305], sum;
//
//int tknp (int mid) {
//    int l = 1, r = n;
//
//}

void solve() {
    cin >> n >> m >> k;
    bool check = true;
    FOR (i, 1, n) {
        cin >> a[i];
        if (a[i] < k) check = false;
        sum += a[i];
    }
    FOR (i, 1, m) {
        cin >> b[i];
    }
    sort (b + 1, b + 1 + m);
    FOR (i, 1, m) {
        pre[i] = pre[i - 1] + b[i];
    }

    if (k > m or !check or sum > pre[m]) {
        cout << "Impossible\n";
        return;
    }

//    if (sum <= pre[k]) {
//        cout << pre[k] - sum;
//        return;
//    }


    FOR (i, 1, m) {
        minn = min(b[i], n);
        FORD (j, pre[m], b[i]) {
            dp[j] = max(dp[j], dp[j - b[i]] + minn);
        }
    }

    ans = -1;
    FOR (i, sum, pre[m]) {
        if (dp[i] >= n * k) {
            ans = i;
            break;
        }
    }

    if (ans != -1) {
        cout << ans - sum;
        return;
    }
    else cout << "Impossible\n";
}

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

    if (fopen(task".inp", "r")) {
        fin(task); fou(task);
    }
    int t = 1;  //cin >> t;
    while(t--) solve();

    cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << "s ";
}

컴파일 시 표준 에러 (stderr) 메시지

kitchen.cpp:88:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   88 | main() {
      | ^~~~
kitchen.cpp: In function 'int main()':
kitchen.cpp:17:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 | #define fin(x) freopen(x".inp","r",stdin)
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~
kitchen.cpp:93:9: note: in expansion of macro 'fin'
   93 |         fin(task); fou(task);
      |         ^~~
kitchen.cpp:18:23: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 | #define fou(x) freopen(x".out","w",stdout)
      |                ~~~~~~~^~~~~~~~~~~~~~~~~~~~
kitchen.cpp:93:20: note: in expansion of macro 'fou'
   93 |         fin(task); fou(task);
      |                    ^~~
#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...