UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#215267#2639. 省钱nodgd10099ms4132kbC++112.3kb2024-11-27 21:18:502024-11-27 23:39:28

answer

#include <bits/stdc++.h>

using namespace std;

typedef long long i64;
const int BUFFER_SIZE = 1 << 20;
char rb[BUFFER_SIZE], *rp = rb, *rt = rb;
inline char read_char() {
    return rp == rt ? (rt = rb + fread(rb, 1, BUFFER_SIZE, stdin), rp = rb, *rp ++) : *rp ++;
}
inline i64 read_int() {
    i64 x = 0;
    char ch = read_char(), flag = 0;
    while (ch != '-' && (ch < '0' || ch > '9')) {
        ch = read_char();
    }
    if (ch == '-') {
        flag = 1;
        ch = read_char();
    }
    for (x = 0; ch >= '0' && ch <= '9'; ch = read_char()) {
        x = x * 10 + (ch - '0');
    }
    return flag ? -x : x;
}


const int MAX_N = 50000 + 5;

int N, K, ans;
i64 S;
int a[MAX_N], b[MAX_N], f[MAX_N];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> qa, qb, qd;

int main() {
    N = read_int(), K = read_int();
    S = read_int();
    for (int i = 1; i <= N; i ++) {
        b[i] = read_int(), a[i] = read_int();
        qa.push(make_pair(a[i], i));
        qb.push(make_pair(b[i], i));
    }
    // printf("[1]\n");
    for (; K && qa.size(); K --) {
        int i = qa.top().second;
        if (S < a[i]) break;
        qa.pop();
        S -= a[i], f[i] = 1, ans ++;
        // printf("f[%d]=%d  S=%lld\n", i, f[i], S);
        qd.push(make_pair(b[i] - a[i], i));
    }
    // printf("[2]\n");
    while (1) {
        for (; qb.size() && f[qb.top().second]; qb.pop());
        int tb = qb.size() ? qb.top().first : -1;
        for (; qa.size() && f[qa.top().second]; qa.pop());
        int tc = qa.size() && qd.size() ? qa.top().first + qd.top().first : -1;
        if (tb != -1 && (tc == -1 || tb <= tc)) {
            if (S < tb) break;
            int i = qb.top().second;
            qb.pop();
            S -= b[i], f[i] = 2, ans ++;
            // printf("f[%d]=%d  S=%lld\n", i, f[i], S);
        } else if (tc != -1 && (tb == -1 || tb > tc)) {
            if (S < tc) break;
            int i = qa.top().second, j = qd.top().second;
            qa.pop(), qd.pop();
            f[j] = 2, f[i] = 1, ans ++;
            S -= a[i] + b[j] - a[j];
            // printf("f[%d]=%d, f[%d]=%d  S=%lld\n", j, f[j], i, f[i], S);
            qd.push(make_pair(b[i] - a[i], i));

        } else break;
    }
    printf("%d\n", ans);
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 9ms
memory: 3868kb

input:

50000 30828 852557364841
682084050 257603011
870868024 517458094
732267860 201407488
777566656 55879...

output:

17903

result:

ok single line: '17903'

Test #2:

score: 10
Accepted
time: 15ms
memory: 3604kb

input:

50000 10508 8982273367520
34111224 12372852
549875017 525549262
357107918 219952140
644308048 222008...

output:

37621

result:

ok single line: '37621'

Test #3:

score: 10
Accepted
time: 4ms
memory: 3604kb

input:

50000 23114 535861686266
359271294 298114231
605400720 491693949
755566780 539381575
155586610 92962...

output:

14723

result:

ok single line: '14723'

Test #4:

score: 10
Accepted
time: 13ms
memory: 3600kb

input:

50000 13490 4616703243118
286358449 133228996
162995754 17235506
661390160 561824344
282751480 15433...

output:

30961

result:

ok single line: '30961'

Test #5:

score: 10
Accepted
time: 17ms
memory: 3864kb

input:

50000 26352 8630976119100
70133466 32927792
90392510 89764542
307782646 75889114
123168574 66039130
...

output:

42944

result:

ok single line: '42944'

Test #6:

score: 10
Accepted
time: 7ms
memory: 3604kb

input:

50000 11800 213255455323
405512104 311547645
122797690 35257030
782246460 533338866
416860264 504733...

output:

9869

result:

ok single line: '9869'

Test #7:

score: 10
Accepted
time: 9ms
memory: 3868kb

input:

50000 19734 4267681411347
732638120 327229436
361949068 274173372
539440696 285784669
94445920 84513...

output:

32498

result:

ok single line: '32498'

Test #8:

score: 10
Accepted
time: 0ms
memory: 3604kb

input:

50000 254 18445304121
375481124 36148026
388507104 183081259
261838134 179691990
485282800 209534680...

output:

1564

result:

ok single line: '1564'

Test #9:

score: 10
Accepted
time: 7ms
memory: 3604kb

input:

50000 3260 4076050769242
210627773 8756794
68253913 5333287
812306900 176444281
561388618 94960450
6...

output:

23173

result:

ok single line: '23173'

Test #10:

score: 10
Accepted
time: 18ms
memory: 4132kb

input:

50000 44485 12129791734731
590854222 262410600
992399148 641692708
219274382 56485932
730651726 4088...

output:

49537

result:

ok single line: '49537'