UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#215136#2441. 物品erican70936ms9304kbC++112.1kb2024-11-26 19:59:432024-11-26 23:03:23

answer

/*  Erica N  */
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define int long long
#define ull unsigned long long
#define pii pair<int, int>
#define ps second
#define pf first
#define itn int
#define rd read()
int read(){
    int xx = 0, ff = 1;char ch = getchar();
    while (ch < '0' || ch > '9') {if (ch == '-')ff = -1; ch = getchar();}
    while (ch >= '0' && ch <= '9')xx = xx * 10 + (ch - '0'), ch = getchar();
    return xx * ff;
}
// void write(int out) {
// 	if (out < 0)
// 		putchar('-'), out = -out;
// 	if (out > 9)
// 		write(out / 10);
// 	putchar(out % 10 + '0');
// }
#define cdbg(x...) do { cerr << #x << " -> "; err(x); } while (0)
void err() { cerr << endl; }
template<template<typename...> class T, typename t, typename... A>
void err(T<t> a, A... x) { for (auto v: a) cerr << v << ' '; err(x...); }
template<typename T, typename... A>
void err(T a, A... x) { cerr << a << ' '; err(x...); }


const int N = 5e5 + 5;
const int INF = 1e18;
const int M = 1e7;
const int MOD = 1e9 + 7;


struct Node{
    int a,w,id;
};

Node p[N],t[N];
int n,c;

bool cmp(Node a,Node b){
    return a.w<b.w;
}

int check(int m,bool final=0){
    int tot=0;
    for(int i=1;i<=n;i++){
        if(m<=t[i].a)p[++tot]=t[i];
    }


    sort(p+1,p+tot+1,cmp);
    int sum=0;
    int cc=c;
    
    for(int i=1;i<=min(tot,m);i++){
        if(p[i].w<=cc){
            cc-=p[i].w;
            sum++;
        }
    }
    if(final){
        cout<<sum<<'\n'<<m<<'\n';
        for(int i=1;i<=sum;i++){
            cout<<p[i].id<<' ';
        }
    }
    return sum;
}

signed main() {
    // freopen(".in","r",stdin);
    // freopen(".out","w",stdout);


    n=rd,c=rd;
    for(int i=1;i<=n;i++){
        t[i]={rd,rd,i};
    }
    
    // for(int i=1;i<=n;i++){
    //     cdbg(i,check(i));
    // }

    int l=1,r=n;
    int res=0;
    while(l<=r){
        int mid=l+r>>1;
        if(check(mid)>=check(mid+1))res=mid,r=mid-1;
        else l=mid+1;
    }

    check(res,1);




}

详细

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

Test #1:

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

input:

18 1024
8 3
8 1
16 9
17 6
2 5
12 3
1 7
7 9
17 1
14 3
2 7
17 5
2 3
2 5
2 10
8 3
2 3
17 5

output:

8
8
2 9 1 6 10 16 12 18 

result:

points 1.0 Correct

Test #2:

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

input:

20 79841
15 4337
9 6289
7 9927
12 1468
7 9390
12 9228
7 5646
8 3438
3 1614
3 7048
10 8840
15 2349
16...

output:

10
10
4 12 14 1 13 20 19 11 6 17 

result:

points 1.0 Correct

Test #3:

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

input:

1888 987654
1082 243
1341 309
1524 959
324 593
894 952
1428 587
1367 91
1669 683
616 866
958 791
172...

output:

949
949
909 1341 231 1259 1327 335 873 1671 892 1070 1872 452 339 501 258 1027 793 1067 1740 665 851...

result:

points 1.0 Correct

Test #4:

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

input:

1999 12000000
1112 2799
524 6890
686 6713
1803 4478
940 4341
1391 8972
953 592
454 7711
524 8224
127...

output:

978
978
53 174 195 1092 1807 517 789 1823 1014 991 423 1060 1800 350 769 1484 1428 1739 704 795 492 ...

result:

points 1.0 Correct

Test #5:

score: 10
Accepted
time: 3ms
memory: 1260kb

input:

2000 9788123
296 3976
154 3441
78 9146
1443 6444
1799 2843
1482 6843
1526 3159
1956 9324
1442 1001
5...

output:

997
997
725 67 1669 1837 1146 694 38 223 1735 1651 1228 358 1005 811 1395 1180 1094 1150 1697 1008 1...

result:

points 1.0 Correct

Test #6:

score: 10
Accepted
time: 404ms
memory: 8204kb

input:

200000 87654321
33240 503
90721 868
64272 858
170928 616
92246 213
50575 59
148252 954
87639 739
328...

output:

100168
100168
163696 156715 137190 70822 35776 31953 67876 154752 198233 92978 76158 157196 168288 1...

result:

points 1.0 Correct

Test #7:

score: 10
Accepted
time: 529ms
memory: 9304kb

input:

200000 987654321
199051 7573
6332 5631
35615 9816
185684 9227
198894 8029
185684 2173
54203 2887
107...

output:

98978
98978
130989 134505 42096 162221 96841 74944 23020 198760 30257 149065 168626 187451 171688 93...

result:

points 1.0 Correct

Test #8:

score: 0
Time Limit Exceeded

input:

444444 998244353
243276 2272
436596 1761
70822 1547
263965 942
280972 2658
87160 421
268504 2945
103...

output:


result:


Test #9:

score: 0
Time Limit Exceeded

input:

500000 999999999
131412 807
486292 804
462352 1139
52896 196
426775 1655
18059 2099
224414 1308
2851...

output:


result:


Test #10:

score: 0
Time Limit Exceeded

input:

500000 1000000000
42362 5090
327916 7618
221602 679
295161 1419
69703 4221
108614 6788
210597 6940
2...

output:


result: