ジン・ムヤン @ 2018-12-12 18:19:16
#include<stdio.h>
struct pl{
int p,l;
};
int main()
{
int n,s,a,b,i,j,count=0;
struct pl m[100],t,c[100];
scanf("%d%d",&n,&s);
scanf("%d%d",&a,&b);
for(i=0;i<n;i++){
scanf("%d%d",&m[i].p,&m[i].l);
}
for (i=0;i<n-1;++i){
for(j=0;j<n-1-i;++j){
if(m[j].l >m[j+1].l){
t=m[j];
m[j]=m[j+1];
m[j+1]=t;
}
}
}
i=0;
while(s>=m[i].l){
if(a+b>=m[i].p) {
s=s-m[i].l;
count++;
}
i++;
}
printf("%d",count);
return 0;
}
by caidzh @ 2018-12-12 18:21:35
这左右横跳的码风。。。
by ジン・ムヤン @ 2018-12-12 19:41:07
@土田共戈 大佬,知道哪里错了吗?求解
by billy23333 @ 2018-12-14 19:15:00
巧了,我只过了第四个点
by 是你的七七 @ 2018-12-17 13:29:06
我也只过了第四个点,弱弱的问一句RE是什么意思
by pangchenyu @ 2018-12-17 20:39:38
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 apassbydreg @ 2018-12-20 12:26:49
根据我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);
}