为什么第四个点过不了?

P1478 陶陶摘苹果(升级版)

这左右横跳的码风。。。
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


|