浙大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相关推荐
- 浙大pat | 浙大pat 牛客网PAT顶级(Top Level)练习题 1001
1001 LUCKY STRING 1872 8254 22% 题目描述 A string s is LUCKY if and only if the number of differentchara ...
- 浙大PAT甲级1040
浙大PAT甲级1040 原题 问题分析 原题 1040 Longest Symmetric String (25 分) Given a string, you are supposed to outp ...
- 1033. 旧键盘打字(20)-浙大PAT乙级真题
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以及应该输入的文 ...
- 浙大PAT甲级1019. General Palindromic Number (20)
1019. General Palindromic Number (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- 浙大 PAT b1040
#include <stdio.h> #include <string.h> int main() {char str[100001];gets(str);int numT = ...
- 浙大PAT 1003题 1003. Emergency
本题用Dfs搜索或者Dijkstra算法都可以,当然也有其它的方法.这题感觉是pat中常见的类型,非常重要. Dfs搜索代码: #include<stdio.h> int road[510 ...
- PAT 1033 旧键盘打字 (20 分) C++
1033 旧键盘打字 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行 ...
- PAT 1033 旧键盘打字
1033 旧键盘打字(20)(20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2 ...
- 浙大PAT甲级1027. Colors in Mars (20)
1027. Colors in Mars (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue People ...
最新文章
- 漫画:禅道程序员的一天
- 直击2019WAIC丨李德毅:人工智能是脱离意识的工具,需要约束的是人类自己
- 居然又要出一部关于程序员的剧!你会追么?
- LiveVideoStackCon 2019上海 优秀出品人与讲师
- 【汇总】flash单个文件上传
- 线性表的Java实现--链式存储(双向链表)
- 记录:希尔排序思路分析
- WPF自定义控件(一)の控件分类
- cobar_note
- iOS分享到WhatsApp
- BOY LONDON 2019秋季 武装集结
- (一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
- 学说话:和光合作用五道口店咖啡吧的小姑娘过招儿;推荐:《如何听如何说》 - [学说话]
- linux 网易云音乐 ssh,网易云音乐For Linux的Fedora安装
- KlipC数据显示2022年日元兑美元汇率有进一步下跌的风险和可能性
- 银心科技与黑萤科技达成战略合作,联合构建区块链数据库存储生态至高点
- vs2015单元测试 - error LNK2011: 未链接预编译对象;映像可能不能运行
- 倪健中在深圳全球元宇宙大会致辞:元宇宙充满巨大空间
- Java基础——接口
- Golang学生管理系统(函数+结构体版)