【CF 1015C】 Songs Compression
原题地址:http://codeforces.com/contest/1015/problem/C
题意:有n首歌,想要存放到U盘里,每首歌都有压缩前和压缩后的体积ai,bi,U盘的最大容量为m,求把所有歌放进U盘所需压缩最少的次数。
使用结构体记录每首歌压缩前的体积与压缩后的体积x,y,以及体积的差值c,对差值进行排序。求出未压缩总体积后依次减去最大的差值,直到体积小于m。压缩后总体积仍大于m的情况特判。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
struct ac
{
ll x,y,c; //数据会爆int,使用long long
}a[100005];
bool cmp(ac x,ac y)
{
return x.c>y.c;
}
int main()
{
int i;
ll n,m,s=0,sum=0;
cin>>n>>m;
for(i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y;
a[i].c=a[i].x-a[i].y;
s+=a[i].x;
sum+=a[i].y;
}
if(sum>m)
{
cout<<"-1"<<endl;
return 0;
}
sort(a,a+n,cmp);
i=0;
while(s>m)
{
s-=a[i].c;
i++;
}
cout<<i<<endl;
return 0;
}