2465: [中山市选2009]小球

2465: [中山市选2009]小球

链接

代码

 1 /*
 2 开始时理解错题了,以为一个瓶子的容量是最大容纳多少的分数。。。理解的偏差的太远了吧!
 3 瓶子的容量是能容下多少球,瓶子的分数上界是球的分数最大的是多少。于是一个球放分大的放分小的占用的容量都是1,所以把球按分数排序,从分数上界大的瓶子顺序往分数上界小的瓶子里放。
 4 */
 5 #include<bits/stdc++.h>
 6 using namespace std;
 7 typedef long long LL;
 8  
 9 inline int read() {
10     int x=0,f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
11     for (;isdigit(ch);ch=getchar())x=x*10+ch-'0';return x*f;
12 }
13  
14 #define pa pair<int,int>
15 #define mp(a,b) make_pair(a,b) 
16  
17 int a[1100];
18 pa b[1010];
19  
20 int main() {
21     int n,m;
22     while (scanf("%d%d",&n,&m)!=EOF) {
23         if (!n && !m) break;
24         for (int i=1; i<=n; ++i) a[i] = read();
25         sort(a+1,a+n+1);
26         for (int i=1; i<=m; ++i) b[i].second = read(),b[i].first = read();
27         sort(b+1,b+m+1);
28          
29         int now = n,ans1 = 0,ans2 = 0;
30         for (int i=m; i>=1; --i) { 
31             while (now && a[now]>b[i].first) now--;
32             while (now && b[i].second) ans1++,ans2 += a[now],b[i].second --,now--;
33         }
34         printf("%d %d
",ans1,ans2);
35     }
36     return 0;
37 }
原文地址:https://www.cnblogs.com/mjtcn/p/9268578.html