日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1033 To Fill or Not to Fill (25 分)【难度: 难 / 知识点: 模拟 贪心】

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1033 To Fill or Not to Fill (25 分)【难度: 难 / 知识点: 模拟 贪心】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


https://pintia.cn/problem-sets/994805342720868352/problems/994805458722734080

#include<cstdio> #include<algorithm> using namespace std; struct gas {double price;double km; }g[520]; bool cmp(gas a,gas b)//距離由小到大排 {return a.km<b.km; } int main(void) {double max_oil;//最大的油量 double km;//距離 double speed;//速度int n;//油箱的數目int i;//循環變量 double maxkm=0; //滿油的最遠距離bool flag=true; //判斷可不可以到達 double x=0;//不可到達的,最遠距離 scanf("%lf%lf%lf%d",&max_oil,&km,&speed,&n); maxkm=max_oil*speed;//滿油的最遠距離 for(i=0;i<n;i++){scanf("%lf%lf",&g[i].price,&g[i].km);}//哨兵 g[n].price = 0;//數組最后面放置終點,價格為0g[n].km = km;//終點距離為kmsort(g,g+n,cmp);//按距離從小到大排序 if(g[0].km!=0)//原點沒有加油站 {flag=false;printf("The maximum travel distance = 0.00\n");return 0;}else//原點有加油站判斷可不可以到達 { for(i=1;i<n;i++){if(maxkm< (g[i].km-g[i-1].km) )//我的最遠距離不能到達下一個加油站。 {x=g[i-1].km+maxkm;flag=false;break;}x=g[i].km;}if(i==n)//說明我可以到最后一個加油站。 {if(maxkm < ( km-g[n-1].km) ){//最后一個加油站到終點的距離大于我的最大行駛距離 flag=false;x=g[n-1].km+maxkm;}} }if(flag){int now=0;//當前所在的加油站編號 初始為0double now_oil=0;//現在的油量double money=0;//總的金錢。 while(now<n){int minPrice_index=-1;//最便宜的油的編號double minPrice=100000;for(i=now+1;i<=n&&(g[i].km-g[now].km)<=maxkm;i++)//找到可以到達的加油站數目 {if(g[i].price<minPrice)//下一個站的油比我標記的最低油價的低 {minPrice=g[i].price;//保存 minPrice_index=i;if(minPrice<g[now].price)//如果找到第一個比當前便宜的站 break;}}double need=(g[minPrice_index].km-g[now].km)/speed;if (minPrice < g[now].price)//如果最低加油站的油價,低于當前油價{money += (need - now_oil)*g[now].price;//補足neednow_oil = 0;//到達加油站minPrice_index后油箱內油量為0 }else//如果加油站minPrice_index的油價高于當前油價{money += (max_oil - now_oil)*g[now].price;//將油箱加滿//到達加油站k后油箱內油量為Cmax-neednow_oil = max_oil - need;}now = minPrice_index;//到達加油站minPrice_index,進入下一層循環}printf("%.2lf\n",money);}elseprintf("The maximum travel distance = %.2lf\n",x);return 0; }

總結

以上是生活随笔為你收集整理的1033 To Fill or Not to Fill (25 分)【难度: 难 / 知识点: 模拟 贪心】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。