林则徐左宗棠 @ 2018-08-21 20:46:07
萌新一个,最简单的思路,就ac了第四个点..
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,h=0,a,s,b,x[281],y[101],ans=0;
cin>>n>>s;
cin>>a>>b;
for(int i=0;i<=n;i++)
{
cin>>x[i]>>y[i];
}
h=a+b;
for(int i=0;i<=n;i++)
{
if(h>=x[i])
if(s>=y[i]){
ans++;
s-=y[i];
}
}
cout<<ans;
return 0;
}
by 捻红尘似水 @ 2018-08-21 20:55:08
for里i从1开始
by 林则徐左宗棠 @ 2018-08-21 20:55:12
@捻红尘似水 i=1的时候也这样
by Khan_ @ 2018-08-21 20:55:33
@黑水玄蛇真棒 咋排序了?
by 林则徐左宗棠 @ 2018-08-21 20:55:48
i=1是我瞅了眼题解看到的
by Khan_ @ 2018-08-21 20:55:54
好像没看到排序
by Dr_Gears @ 2018-08-21 20:56:01
@黑水玄蛇真棒 那就别做这道题了,去做原题P1046。
by 林则徐左宗棠 @ 2018-08-21 20:56:06
@Khan_ 您这个排序是啥意思啊..
by 林则徐左宗棠 @ 2018-08-21 20:56:34
@竹窝呵呵 做的新手村,1046早ac了,在做1-7
by Khan_ @ 2018-08-21 20:57:13
@黑水玄蛇真棒 自己看吧
#include <iostream>
using namespace std;
int n,strong;
int chair,hand,total,ans;
int applehigh[100001],need[100001];
void qsort(int l,int r)
{
int i,j,mid,p;
i=l;j=r;
mid=need[(l+r)/2]; //将当前序列在中间位置的数定义为分隔数
do
{
while (need[i]<mid) {i++;} //在左半部分寻找比中间数大的数
while (need[j]>mid) {j--;} //在右半部分寻找比中间数小的数
if (i<=j)
{ //若找到一组与排序目标不一致的数对则交换它们
p=need[i];need[i]=need[j];need[j]=p;
p=applehigh[i];applehigh[i]=applehigh[j];applehigh[j]=p;
i++;j--; //继续找
}
}while(i<=j); //注意这里要有等号
if (l<j) qsort(l,j); //若未到两个数的边界,则递归搜索左右区间
if (i<r) qsort(i,r);
}
int main()
{
scanf("%d%d",&n,&strong);
scanf("%d%d",&chair,&hand);
total=chair+hand;
for(int i=1;i<=n;i++)
scanf("%d%d",&applehigh[i],&need[i]);
//cout<<endl;
qsort(1,n);
//for(int i=1;i<=n;i++)
//cout<<applehigh[i]<<' '<<need[i]<<endl;
for(int i=1;i<=n;i++)
{
if(applehigh[i]<=total&&need[i]<strong)
{
ans++;strong-=need[i];//cout<<i<<' ';
}
else continue;
}
//cout<<endl;
printf("%d",ans);
}
by 捻红尘似水 @ 2018-08-21 20:57:35
数组开小了 n<=5000 x,y也要开到5000