• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Niro Einteson
文可提笔安天下 武可上马定乾坤
博客园    首页    新随笔    联系   管理    订阅  订阅

P1478 陶陶摘苹果(升级版)

P1478 陶陶摘苹果(升级版)


题目描述

又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次他有一个a公分的椅子。当他
手够不着时,他会站到椅子上再试试。
这次与NOlp2005普及组第一题不同的是: 陶陶之前搬凳子,力气识剩下s了。当然,每次摘苹果时都要
用一定的力气。陶陶想知道在s < 0之前最多能摘到多少个苹果。
现在已知n个苹果到达地上的高度xi,椅子的高度a,陶陶手伸直的最大长度b,陶陶所剩的力气s,陶
陶摘一个苹果需要的力气Yi,求陶陶最多能摘到多少个苹果。

输入格式
第1行:两个数苹果数n,气s。
第2行:两个数椅子的高度a,陶陶手伸直的最大长度b。
第3行~第3+n- 1行:每行两个数苹果高度xi,摘这个苹果需要的力气Yi。

输出格式
只有一个整数,表示陶陶最多能摘到的苹果数。

 

输入输出样例
输入#1
8 15
20 130
120 3
150 2
1107
180 1
508
2000
140 3
120 2

输出#1

4

说明/提示
对于100%的数据,n≤5000,a≤50,b≤200,s≤1000,xi≤280,Yi≤100。

 

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 struct  node{
 5     double x;//高度x
 6     double y;//力气y
 7 }data[5001];
 8 bool cmp(node X,node Y){
 9     if(X.x==Y.x)
10         return X.y<Y.y;
11     return X.y<Y.y;
12     
13 }
14 int main(){
15     int n,s;//苹果数n<=5000,力气s<=1000
16     int a,b;//椅子高度a<=50,伸手最大长度b<=200
17     cin>>n>>s;
18     cin>>a>>b;
19     if(s<=0) {
20         cout<<0<<endl;
21         return 0;
22     }
23     for(int i=0;i<n;i++){
24         cin>>data[i].x>>data[i].y;
25     }
26     sort(data,data+n,cmp);
27     int sum=0;//摘的苹果数
28     for(int i=0;i<n;i++){
29         if(data[i].y>s){
30             break;
31         }
32         //力气够了
33         if(data[i].x<=(a+b)){//高度够了
34             s-=data[i].y;
35             sum++;   
36         }
37     }
38     cout<<sum<<endl;
39     return 0;
40 }
View Code

 

posted @ 2020-03-10 21:45  Nirogo  阅读(249)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3