QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#546385#8866. Drying Laundryzezoo050WA 455ms5984kbC++231.9kb2024-09-04 00:20:002024-09-04 00:20:01

Judging History

你现在查看的是最新测评结果

  • [2024-09-04 00:20:01]
  • 评测
  • 测评结果:WA
  • 用时:455ms
  • 内存:5984kb
  • [2024-09-04 00:20:00]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;
const int N = 3e5 + 10, M = N - 10;
int n, q;
bitset<N> bt;
array<int, 3> arr[N];
int suf[N];

int get(int x) {
    return M - x;
}

void solve() {
    cin >> n >> q;
    bt[0] = true;
    long long sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> arr[i][2] >> arr[i][1] >> arr[i][0];
        bt |= bt << arr[i][2];
        sum += arr[i][2];
    }
    long long mn = 1e18;
    bt[0] = false;
    for (int i = 1; i <= M; i++) {
        if (bt[i]) {
            mn = min(mn, max((long long) i, sum - i));
        }
        bt[i] = false;
    }
    for (int i = 0; i < N; i++)
        bt[i] = false;

    sort(arr, arr + n);

    vector<pair<int, int>> v;

    if (mn <= M)
        v.emplace_back(mn, (*max_element(arr, arr + n))[0]);
    suf[n - 1] = arr[n - 1][1];
    for (int i = n - 2; i >= 0; i--) {
        suf[i] = max(suf[i + 1], arr[i][1]);
    }

    bt[get(0)] = true;

    long long before = 0;
    for (int i = 0; i < n; i++) {
        bt |= bt >> arr[i][2];
        before += arr[i][2];
        sum -= arr[i][2];
        if (before + sum * 2 > M * 2)
            continue;
        auto it = (int) bt._Find_next(get((int) (before + 1) / 2) - 1);
        v.emplace_back(max(get(it), (int) before - get(it)) + sum, max(suf[i + 1], arr[i][0]));
    }
    std::sort(v.begin(), v.end());
    while (q--) {
        int l;
        cin >> l;
        auto it = std::upper_bound(v.begin(), v.end(), make_pair(l, (int) 1e9 + 7));
//        auto it = v.begin();
        if (it == v.begin()) {
            cout << "-1\n";
            continue;
        }
        it--;
        cout << it->second << '\n';
    }
}

int32_t main() {
    std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
    int t = 1;

//    cin >> t;

    cout << fixed << setprecision(10);
    while (t--) {
        solve();
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 455ms
memory: 5984kb

input:

30000 300000
2 255945072 661001220
2 68592698 870026391
2 297602072 943696446
2 423786358 574645263
2 178914703 647767179
2 198609024 717883631
2 167020579 942479667
2 63119081 995866587
2 347306369 881413517
2 58674847 601956876
2 110801873 707995015
2 155453326 765668358
2 438060979 649128264
2 20...

output:

-1
780386172
-1
882630795
-1
-1
694190157
535268040
-1
-1
822780178
867163401
-1
-1
787724542
-1
-1
843406425
-1
608088477
-1
678487355
611519637
956002698
-1
-1
691131846
-1
-1
812320879
-1
677850117
-1
537706551
-1
893747900
786791412
-1
-1
715094556
-1
810021220
724602450
950838618
686685989
-1
-...

result:

wrong answer 6818th lines differ - expected: '500181714', found: '500219178'