Codeforces Round #436 C. Bus
题意:一辆车在一条路上行驶,给你路的总长度a,油箱的容量b,加油站在距离起点的距离f,以及需要走多少遍这条路k(注意:不是往返)
问你最少加多少次油能走完。
6 9 2 4
4
6 10 2 4
2
6 5 4 3
-1 思路:把需要走的路程拉直来看,那么相邻两次经过加油站之间的路程为2*f或2*(a-f),再加上一些特判就好了。 代码:
#include<iostream>
#include<string.h>
using namespace std; long long a,b,f,k; int main(){
cin>>a>>b>>f>>k;
if(k==1){ //特判只要走一遍时的情况
if(b>=a)cout<<0<<endl;
else {
if(b>=f&&b>=a-f)cout<<1<<endl;
else cout<<-1<<endl;
}
return 0;
}
long long x=2*f,y=2*(a-f),sum=f,last=b-f,c=0;
//x和y记录的是在两次经过加油站之间的路程的两种情况
//sum记录的是已经走过了多少路程,从第一次经过加油站开始算
//last记录的是油箱中所剩的油
//c记录加油次数
bool flag=1;
int op=2;
if(last<0){ //连加油站都走不到
cout<<-1<<endl;
return 0;
}
while(1){
if(k*a-sum==f||k*a-sum==a-f){//在最后一次经过加油站时需要特判
int w;
if(k*a-sum==f)w=f;
else w=a-f;
if(last<w)c++;
break;
}
if(op==1){ //op=1表示x这种情况
if(last<x){
last=b-x;
c++;
}
else last-=x;
sum+=x;
op=2;
}
else { //op=2表示y这种情况
if(last<y){
last=b-y;
c++;
}
else last-=y;
sum+=y;
op=1;
}
if(last<0){//如果中间出现了油箱为负的情况,那么表示走不到
flag=0;
break;
}
}
if(flag==0)cout<<-1<<endl;
else cout<<c<<endl;
return 0;
}
Codeforces Round #436 C. Bus的更多相关文章
- Codeforces Round #436 (Div. 2)【A、B、C、D、E】
Codeforces Round #436 (Div. 2) 敲出一身冷汗...感觉自己宛如智障:( codeforces 864 A. Fair Game[水] 题意:已知n为偶数,有n张卡片,每张 ...
- Codeforces Round #436 (Div. 2)C. Bus 模拟
C. Bus time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input out ...
- Codeforces Round #436 (Div. 2) C. Bus
http://codeforces.com/contest/864/problem/C 题意: 坐标轴上有x = 0和 x = a两点,汽车从0到a之后掉头返回,从a到0之后又掉头驶向a...从0到a ...
- Codeforces Round #436 (Div. 2) E. Fire
http://codeforces.com/contest/864/problem/E 题意: 有一堆物品,每个物品有3个属性,需要的时间,失效的时间(一开始)和价值.只能一件一件的选择物品(即在选择 ...
- Codeforces Round #436 (Div. 2)
http://codeforces.com/contest/864 第一次打cf的月赛-- A 题意:给你一个数列,问你能不能保证里面只有两种数且个数相等.2<=n<=100,1<= ...
- Codeforces Round #436 (Div. 2) D. Make a Permutation!
http://codeforces.com/contest/864/problem/D 题意: 给出n和n个数(ai <= n),要求改变其中某些数,使得这n个数为1到n的一个排列,首先保证修改 ...
- Codeforces Round #436 (Div. 2) B. Polycarp and Letters
http://codeforces.com/contest/864/problem/B 题意: 给出一个字符串,要求找到一个集合S,使得从S中选出的所有数,在这些数的位置上的字母全部为小写且是不同的字 ...
- Codeforces Round #436 (Div. 2)D. Make a Permutation! 模拟
D. Make a Permutation! time limit per test: 2 seconds memory limit per test: 256 megabytes input: st ...
- Codeforces Round #436 (Div. 2) A,B,D
A. Fair Game 题目链接:http://codeforces.com/contest/864/problem/A 水题 #include<iostream> #include&l ...
随机推荐
- 如何使用linux+xvfb+python+rfs+firefox+jenkins实现UI自动化
首先说一下背景,在项目中使用windows执行机进行rfs脚本运行时,遇到两个问题: 1.Jenkins的多个slave节点和master的连接通过windows插件去建立,如果出现slave断连,无 ...
- [ZZ]AppiumForWindows 菜鸟计划合集
AppiumForWindows 菜鸟计划 (一) Appium 材料包 AppiumForWindows 菜鸟计划 (二) 源码环境搭建及代码结构 AppiumForWindows 菜鸟计划 (三) ...
- Kubernetes生态工具
Helm Helm 是 Kubernetes 的包管理器,它是查找.共享和使用为 Kubernetes 开发的软件的最佳方式.Helm Charts 可用于定义.安装和升级复杂的 Kubernetes ...
- linux 安装中文支持
下载 fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm 安装各种提示的依赖 安装 chkf ...
- 架构师技能图谱 V1.2
系统架构能力 基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 灾难恢复和备份 协议设计 二进制协议 文本协议 接入层架构设计 DNS 轮询 动静态分离 静态化 反 ...
- Selenium自动化Chrome浏览器 在windows下窗口最大化
本人由于是搞自动化时间不长,所以踩了很多坑.准备把踩得这些坑记录下来. 自动化测试最基础的就是打开浏览器然后让Windows窗口最大化. 一开始百度了好多窗口最大化的方法,最常用的是: WebDriv ...
- 位运算练习:将整数A转换为B,需要改变多少个bit位
思路解析: 将整数A转换为B,如果A和B在第i(0<=i<32)个位上相等,则不需要改变这个BIT位,如果在第i位上不相等,则需要改变这个BIT位.所以问题转化为了A和B有多少个BIT位不 ...
- Tmux 常用快捷键
Ctrl-b : Send the prefix key through to the application. " : Split the current pane into two, t ...
- intellij与eclipse默认快捷键对比
最近想用intellij,于是找找快捷键.用惯了eclipse,都不太适应intellij的快捷键.慢慢的就适应了常用的快捷键 Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键, ...
- when to use reinterpret_cast
写的太好了.. When you convert for example int(12) to unsigned float (12.0f) your processor needs to invok ...