这左右横跳的码风。。。
by 土田共戈 @ 2018-12-12 18:21:35
@[土田共戈](/space/show?uid=68085) 大佬,知道哪里错了吗?求解
by ジン・ムヤン @ 2018-12-12 19:41:07
巧了,我只过了第四个点
by billy23333 @ 2018-12-14 19:15:00
我也只过了第四个点,弱弱的问一句RE是什么意思
by 是你的七七 @ 2018-12-17 13:29:06
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,s,a,b,xi,yi;
int y[5005]={0};
cin>>n>>s>>a>>b;
int c= 1;
for(int i=1; i<=n; i++) {
cin>>xi>>yi;
if(a+b>=xi) { //可以拿到苹果 并且力气够
y[c++]=yi;
}
}
sort(y+1,y+1+c-1);//sort库函数,排序
int t= 0; //总共消耗的力气数
int ans = 0;
for (int i=1; i<c; i++) {
if(t+y[i]<=s) {
t+=y[i];
ans++;
} else {
break;
}
}
printf("%d\n",ans);
return 0;
}
by pangchenyu @ 2018-12-17 20:39:38
根据我wa的经验来看……第四个点的数据是所有苹果都能摘完而且体力还非负的。
如果第四个点wa或者re的话可以考虑在检测的循环中加上类似 `if(计数==n) break;` 的代码。
如果是只有第四个点过了的话……请考虑你们排序的算法吧……因为第四个点上述的特殊性就算你不排序也能过的
贴一下我AC的代码(C语言):
```
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a, const void *b)
{
return **(int**)a - **(int**)b;
} // qsort 对指针数组排序
int main()
{
int i,a,b,l,n,s,height[5000],strength[5000];
int *pointer[5000];
scanf("%d %d %d %d", &n, &s, &a, &b);
l = a + b;
for(i=0;i<n;i++)
{
scanf("%d %d", height+i, strength+i);
pointer[i] = strength + i; // 这个指针数组指向要用的力气
}
qsort(pointer,n,sizeof(int*),cmp); // 从小到大排列所需力气
int num=0;
for(i=0;s>=0 && i<n;i++)
{
if(height[pointer[i]-strength]<=l) // 检测是否能摘到
{
s = s - *pointer[i];
if(s<0) break;
num++;
}
}
printf("%d", num);
}
```
by apassbydreg @ 2018-12-20 12:26:49