郑涞允
(菜虚捆)
1
#include<bits/stdc++.h>
using namespace std;
struct hello{
int x,y;//苹果高度x,需要的力气y
}c[2005];
bool cmp(hello a,hello b){
return a.y<b.y;
}
int main(){
int n,s,a,b;//n个苹果,剩下的力气s,椅子高度a,手伸直的最大高度b。
cin>>n>>s>>a>>b;
for(int i=1;i<=n;i++)
{
cin>>c[i].x>>c[i].y;
}
sort(c+1,c+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
while(s>=0)
if(b+a>=c[i].x and c[i].y<=s)
{
s-=c[i].y;
ans++;
}
}
cout<<ans;
}
题目描述:
又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。这次与NOIp2005普及组第一题不同的是:陶陶之前搬凳子,力气只剩下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
110 7
180 1
50 8
200 0
140 3
120 2
样例输出1:
4
约定:
所有数据:n<=5000 a<=50 b<=200 s<=1000
2 个赞
方悦丞
(Nexus丶准哥真男人)
2
思路在代码里
这好像是洛谷的题吧
#include<iostream>
using namespace std;
int c[101];//定义一百个桶子,c[i]代表用i个力气能摘到的苹果的数目
int main(){
int n,s,h,a,b,i,t=0;
cin>>n>>s>>h>>i;h+=i;//输入,借用"i"将淘淘用凳子达到的最大高度复制给"h"
for(i=1;i<=n;i++){
cin>>a>>b;
if(a<=h)c[b]++;//如果能摘到,就在用b个力气能摘到苹果的桶子中加一
}
//接下来 按力气从小到大选苹果
for(i=0;i<=100&&s>=0;i++){//注意要从"0"开始,有苹果是免费的
while(c[i]){//一个桶子里也可有多个苹果
s-=i;//减去摘这个苹果的力气
t++;//摘到的苹果数加一
c[i]--;//桶里的苹果减一个
if(s<0){//当力气没了时结束
t--;//这个苹果没有足够力气摘不了(s<0)
break;
}
}
}
cout<<t;//输出。
return 0;
有用的话给个解决方案呗
2 个赞
康雨齐
(Bella)
13
#include
#include
using namespace std;
struct apple{
int a,b;
}r[100005];
bool cmp(apple a,apple b){
return a.b<b.b;
}
int n,a,b,s,sum=0;
int main(){
cin>>n>>s;
cin>>a>>b;
for(int i=0;i<n;i++){
cin>>r[i].a>>r[i].b;
}
sort(r,r+n,cmp);
for(int i=0;i<n;i++){
if(s>=r[i].b && r[i].a<=a+b){
sum++;
s-=r[i].b;
}
}
cout<<sum;
return 0;
}
2 个赞
熊浩辰
(熊浩辰)
17
#include<bits/stdc++.h>
using namespace std;
struct apple{
int a,b;
}r[100005];
bool cmp(apple a,apple b){
return a.b<b.b;
}
int n,a,b,s,sum=0;
int main(){
cin>>n>>s;
cin>>a>>b;
for(int i=0;i<n;i++){
cin>>r[i].a>>r[i].b;
}
sort(r,r+n,cmp);
for(int i=0;i<n;i++){
if(s>=r[i].b && r[i].a<=a+b){
sum++;
s-=r[i].b;
}
}
cout<<sum;
return 0;
}
熊浩辰
(熊浩辰)
18
#include<bits/stdc++.h>
using namespace std;
struct apple{
int a,b;
}r[100005];
bool cmp(apple a,apple b){
return a.b<b.b;
}
int n,a,b,s,sum=0;
int main(){
cin>>n>>s;
cin>>a>>b;
for(int i=0;i<n;i++){
cin>>r[i].a>>r[i].b;
}
sort(r,r+n,cmp);
for(int i=0;i<n;i++){
if(s>=r[i].b && r[i].a<=a+b){
sum++;
s-=r[i].b;
}
}
cout<<sum;
return 0;
}
AC代码