题解
- 水题一道
- 我们先把可以来回的飞船弄出来,然后排序,从大到小做就好了
代码
1 #include<cstdio> 2 #include<algorithm> 3 #define ll long long 4 using namespace std; 5 ll n,m,cnt,ans,g,l[100010],k; 6 int main() 7 { 8 scanf("%lld%lld%lld",&n,&m,&k); 9 for (ll i=1,x,y;i<=n;i++) { scanf("%lld%lld",&x,&y); if (y>=(2*k)) l[++cnt]=x; } 10 sort(l+1,l+cnt+1); 11 for (ll i=cnt;i>=1;i--) if (g+l[i]<m) g+=l[i],ans++; else { g+=l[i]; ans++; break; } 12 if (g>=m) printf("%lld",ans); else printf("-1"); 13 }