- C++
暑B3进阶0718课堂练习T4题解
- 2024-7-18 21:00:06 @
#include<bits/stdc++.h>
using namespace std;
long long s,n,m,sum,ans;
struct node{
int a,b;
}arr[100005];
bool cmp(node x,node y)
{
return x.a-x.b>y.a-y.b;
}
bool check(int x)
{
int cnt=0,pre=0;
for(int i=1;i<=n;i++)
{
if(i<=x) cnt+=arr[i].b;
else cnt+=arr[i].a;
if(cnt>m) return 0;
}
return 1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>arr[i].a>>arr[i].b;
for(int i=1;i<=n;i++) sum+=arr[i].b;
if(sum>m)
{
cout<<-1;
return 0;
}
sort(arr+1,arr+n+1,cmp);
int l=0,r=n;
while(l<=r)
{
int mid=l+(r-l)/2;
if(check(mid)==1)
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans;
return 0;
}
1 条评论
-
王子鑫 LV 4 @ 2024-7-18 21:03:51
NB
- 1