17暑假练习赛2 Codeforces Round #501 (Div. 3) 1015C
贪心水题,思路简单
坑点:不开long long会过不去,以后统一用long long做题
失误:考虑到了最小值大于容量的情况却没判断最大值小于容量的情况
#include<iostream>
#include<algorithm>
using namespace std;
long long int n,m,ans;//n songs m max_store
struct Song
{
long long int before,after,differ;
}song[100008];
bool cmp(Song a,Song b){return a.differ>b.differ;}
long long int maxx,minn;
int main()
{
while(cin>>n>>m)
{
maxx=0,minn=0,ans=0;
for(long long int i=1;i<=n;i++)
{
cin>>song[i].before>>song[i].after;
song[i].differ=song[i].before-song[i].after;
maxx+=song[i].before;minn+=song[i].after;
}
if(minn>m) cout<<"-1"<<endl;
else if(minn==m) cout<<n<<endl;
else if(maxx<=m) cout<<"0"<<endl;
else{
sort(song+1,song+n+1,cmp);
for(long long int i=1;maxx>m&&i<=n;i++)
{
maxx-=song[i].differ;
ans++;
}
cout<<ans<<endl;
}
}
}