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??被这道题卡死了···代码如下 #include<iostream> #include <algorithm> using namespace std; typedef pair<int,int> pr; pr a[10000]; int heap[10000],sz=0;//模拟根值最大的树 int push(int x){//模拟树的更新 int i =sz++; while( i>0){ int p=(i-1)/2; if(heap[p]>=x)break; heap[i ]=heap[p]; i=p; } heap[i]=x; return 0; } int pop(){//清除并返回根值同时更新 int ret=heap[0]; int x=heap[--sz]; int i=0; while(2*i+1<sz){ int a=2*i+1; int b=2*i+2; if(b<sz&&heap[b]<heap[a])a=b; if(heap[a]<x)break; heap[i]=heap[a]; i=a; } heap[i]=x; return ret; } int cmp(const pr p1,const pr p2){ if(p1.first>p2.first)return 1; else return 0; } int main(){ int n,l,p,i=0,ans=0,flag=0; cin>>n; for(int i=0;i<n;i++){ cin>>a[i].first>>a[i].second; } cin>>l>>p; sort(a,a+n,cmp);//排序剩余距离 l-=p; while(l>0){//循环直到到达或超过终点 for(;a[i].first>=l;i++){ push(a[i].second);//把可以到达的加油站油量加入队列 } if(sz==0){flag=1;break;//如果不存在可加的油就返回false } p=pop();//从队列中清除已经加过油的加油站 l-=p; ans++; } if(flag)cout<<-1<<endl; else cout<<ans<<endl; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator