浙大PAT 1033
生活随笔
收集整理的這篇文章主要介紹了
浙大PAT 1033
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分析:貪心算法;
從起點選擇 最近的比起點小的;如果沒有選擇范圍內最小的;其次看距離終點是否在范圍內;
過程:調試了很多次,最后只是兩個浮點數的問題;
下面是ac 代碼;
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
struct zhandian{double gas;float dis;
}sta[501];
int n;
int carry,maxd;
int dvag;
bool cmp(const zhandian &a,const zhandian &b)
{return a.dis<b.dis;
}int findmin(int chushi,int maxlength)
{int i=chushi+1;int next=-1;float maxgas=1<<30;if(maxd-sta[chushi].dis<=maxlength){while(sta[i].dis-sta[chushi].dis<=maxlength&&i<n){if(sta[i].gas<=sta[chushi].gas){next=i;break;}i++;} }elsewhile(sta[i].dis-sta[chushi].dis<=maxlength&&i<n){if(sta[i].gas<=sta[chushi].gas){next=i;break;}if(sta[i].gas<=maxgas){next=i;maxgas=sta[i].gas;}i++;}if(next!=-1)return next;else return -1;
}
int main()
{int tankload=0;float maxlength;while(scanf("%d%d%d%d",&carry,&maxd,&dvag,&n)!=EOF){for(int i=0;i<n;i++){cin>>sta[i].gas;cin>>sta[i].dis;}sort(sta,sta+n,cmp);maxlength=carry*dvag;int i=0;float length=0;float count=0;int flag=0;int chushi=0;float youxiang=0;if(sta[0].dis!=0){printf("The maximum travel distance = 0.00\n");continue;}while(1){int kk=maxd-sta[chushi].dis; if(kk<=maxlength){int k=findmin(chushi,maxlength);if(k==-1){ length=maxd;count+=(kk-youxiang*dvag)*sta[chushi].gas/dvag;break;}else{float kount=sta[k].dis-sta[chushi].dis-youxiang*dvag;if(kount>=0){count+=kount*sta[chushi].gas/dvag;youxiang=0;}else {youxiang=-kount/dvag;}length+=sta[k].dis-sta[chushi].dis; chushi=k;} }else {int k=findmin(chushi,maxlength);if(k==-1){length+=maxlength;flag=1;break;}else{if(sta[k].gas<=sta[chushi].gas){float kount=sta[k].dis-sta[chushi].dis-youxiang*dvag;if(kount>=0){count+=kount*sta[chushi].gas/dvag;youxiang=0;}else {youxiang=-1.0*kount/dvag;}}else {count+=(carry-youxiang)*sta[chushi].gas;youxiang=carry-(sta[k].dis-sta[chushi].dis)/dvag;}length+=sta[k].dis-sta[chushi].dis; chushi=k;}}}if(flag==0) printf("%.2f\n",count);else printf("The maximum travel distance = %.2f\n",length);
}return 0;
}
總結
以上是生活随笔為你收集整理的浙大PAT 1033的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这帖子,程序员的痛心疾首,我明臣哭了.
- 下一篇: 字蛛的用法以及遇到的问题