当前位置: 首页 > news >正文

☆1033

 思路很简单,查找可到达范围内最便宜的加油站,如果没有找到加油站直接返回当前加油站的距离+满油的里程,如果找到了对比改加油站的油价和当前加油站的油价。

  有 3点需要注意

  1. 添加终点到加油站列表里,并设改点油价为0
  2. 初试状态为,nowsta=0; cost=0; nowTank=0; ,不设当前距离等其他变量,减少混淆概率
  3. 找到加油站后,直接更新为到此加油站的状态。

  代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 using namespace std;
 5 const int maxn=510;
 6 const int INF=100000000;
 7 struct station{
 8     double price, dis;
 9 }sta[maxn];
10 
11 
12 bool cmp(station a, station b){
13     return a.dis<b.dis;
14 }
15 int main()
16 {
17     double capacity, distance, avg;
18     int num;
19     cin>>capacity>>distance>>avg>>num;
20     for(int i=0;i<num;i++)cin>>sta[i].price>>sta[i].dis;
21     sta[num].price=0, sta[num].dis=distance;
22     sort(sta,sta+num,cmp);
23 
24 
25 
26 
27     if(sta[0].dis>0){cout<<"The maximum travel distance = 0.00";}
28     else{
29         int now=0;
30         double cost=0, nowTank=0, MAX=capacity*avg;
31         while(now<num){
32             int k=-1;
33             double priceMin=INF;
34             for(int i=now+1;i<=num&&sta[i].dis-sta[now].dis<=MAX;i++){
35                 if(sta[i].price<priceMin){
36                     priceMin=sta[i].price;
37                     k=i;
38                 }
39                 if(sta[i].price<sta[now].price)break;
40             }
41             if(k==-1)break;
42             else{
43                 double need=(sta[k].dis-sta[now].dis)/avg;//用油
44                 if(priceMin<sta[now].price){
45                     if(nowTank<need){
46                         cost+=(need-nowTank)*sta[now].price;
47                         nowTank=0;
48                     }
49                     else{
50                         nowTank-=need;
51                     }
52 
53                 }else{
54                     cost+=(capacity-nowTank)*sta[now].price;
55                     nowTank=(capacity-need);
56                 }
57                 now=k;
58             }
59 
60         }
61             if(now==num){
62                 printf("%.2f\n",cost);
63             }else{
64                 printf("The maximum travel distance = %.2f",sta[now].dis+MAX);
65             }
66         }
67 
68     return 0;
69 }

 

转载于:https://www.cnblogs.com/flipped415/p/10442045.html

相关文章:

  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • linux下实用的快速随机生成复杂密码
  • 互联网世界,联通你我,这40张图送给你!让你笑到肚子疼!
  • WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 手写双向链表LinkedList的几个常用功能
  • Python中eval与exec的使用及区别
  • CSS选择器介绍和优先级
  • PPT设计网站 驼峰设计
  • js实现简易的touch事件(es5)
  • Mac OS安装Docker容器的3种方式与差别:Docker for Mac
  • 基于MicroPython的家庭可燃气体泄露微信报警器
  • 使用ABAP代码创建S/4HANA里的Sales Order
  • Redis的应用场景
  • 学习/linux/list.h_双链表实现
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【翻译】babel对TC39装饰器草案的实现
  • 2017年终总结、随想
  • JavaScript 奇技淫巧
  • Magento 1.x 中文订单打印乱码
  • Node项目之评分系统(二)- 数据库设计
  • PHP 的 SAPI 是个什么东西
  • tensorflow学习笔记3——MNIST应用篇
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 反思总结然后整装待发
  • 记一次删除Git记录中的大文件的过程
  • 警报:线上事故之CountDownLatch的威力
  • 聊聊flink的BlobWriter
  • 我看到的前端
  • 新书推荐|Windows黑客编程技术详解
  • 7行Python代码的人脸识别
  • k8s使用glusterfs实现动态持久化存储
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #include<初见C语言之指针(5)>
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (02)vite环境变量配置
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (生成器)yield与(迭代器)generator
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET MVC第三章、三种传值方式
  • .NET 材料检测系统崩溃分析
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .NET学习教程二——.net基础定义+VS常用设置
  • /3GB和/USERVA开关