Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
第一次贴wa的代码让高手们给我查错,真不好意思,我也用stl的heap+greedy#include <stdio.h> #include <iostream> #include <algorithm> using namespace std; struct Lo{ int oil,lo; bool friend operator < (Lo a,Lo b) { return a.lo>b.lo; } }s[10001]; int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int n,l,p,i,j,k,cover,len,ans; //最后三个分别是 最大到达距离,堆长度,计算结果 int sta[10001]; // 油站的堆数组 while(scanf("%d",&n)!=EOF){ for(i=0;i<n;i++) scanf("%d%d",&s[i].lo,&s[i].oil); sort(s,s+n); // 按路程从大到小排序 scanf("%d%d",&l,&p); cover=l-p; //不用加油能走到位置 len=ans=0; for(i=0;i<n;i++) if(s[i].lo<=l) break; //把在原始位置后面的省略 while(cover>0){ // 只要能继续前行 for(;i<n;i++){ if(s[i].lo<=cover){ // 在能走到的范围内,都把油加进堆中 sta[len++]=s[i].oil; // 压堆 push_heap(sta,sta+len); } } if(len==0) break; //如果堆中没有元素,而cover的路程又没有到终点,则失败 cover -= sta[0]; // 减去最大的油 ans++; //计数器加1 pop_heap(sta,sta+len); // 出堆 len--; } if(cover>0) printf("-1\n"); else printf("%d\n",ans); } return 1; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator