CodeForces 592C (胡搞)
来源:互联网 发布:linux程序设计 微盘 编辑:程序博客网 时间:2024/03/28 20:36
http://codeforces.com/problemset/problem/592/C
题意是:
两个人A和B每个人每走一步的距离分别为w,b。现在给一个跑道,跑道后面是悬崖,人不能掉进悬崖。问最终A和B谁离起点越远谁获胜。
然后给一个长度L,问在长度L的范围里面,不能判断胜负的概率是多少。
解题思路:
1.当距离小于min(w,b)时,两人都在原点,不能判断出胜负。
2.当距离为w,b的最小公倍数时,即 lcm(w,b)时,不能判断出胜负。
3.当距离为 K*lcm(w,b)+min(w-1,b-1)时,两人都在 K * lcm(w,b)处,不能判断胜负。
4.当跳完最后一个满足 K*lcm(w,b)<=t的K时,后面有一段距离要巧妙的处理,这时候要取 min(min(w-1,b-1),t%lcm(w,b))。主要是避免 K * lcm(w,b) + min(w-1,b-1) > t的情况。
其中求lcm时,换成double型增大Long long 的范围。
感觉稍微有点难度的地方是第三点不好想。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <set>#include <vector>#include <map>#include <queue>#include <stack>#include <algorithm>using namespace std;typedef long long LL;const double eps = 1e-9;LL gcd(LL a,LL b){ return b==0?a:gcd(b,a%b);}int main(){ LL t,w,b; cin>>t>>w>>b; LL tmp = gcd(w,b); LL ans = min(min(w-1,b-1),t); if(!(1.*w/tmp * b - t > eps)) { LL lcm = w/tmp *b; ans += t/lcm + (t/lcm-1)*min(w-1,b-1) + min(min(w-1,b-1),t%lcm); } LL now = gcd(ans,t); cout<<ans/now<<"/"<<t/now<<endl; return 0;}
0 0
- CodeForces 592C (胡搞)
- Codeforces Round #143 (Div. 2) C. To Add or Not to Add 胡搞
- 胡搞
- Ponds(图论胡搞)
- Codeforces 394D Physical Education and Buns 胡搞
- ZOJ 2523 —— Number of People(数论,胡搞)
- NOJ——1624死胡同(胡搞模拟)
- [ZT]HDU胡搞题
- codeforces 121 (比赛) codeforces 191C
- 【CodeForces】554C - CodeForces 554C(组合数学)
- codeforces 551C(二分)
- CodeForces 302C(数学)
- Codeforces 197C (脑洞)
- CodeForces 508C (贪心)
- codeforces 731C(DFS)
- codeforces 767C (dfs)
- Codeforces 777C(水)
- Codeforces 805C (贪心)
- UVA565订披萨,每个人提几个条件,至少满足每个人的一个条件的方案
- Android设计模式之观察者模式
- $(document).on('click','.remove',function(){})
- JOS大内核锁
- 声光控延时开关设计原理
- CodeForces 592C (胡搞)
- jieba分词
- 如何防止滴滴出行后台自启
- javascript 实现 java 中String的hashcode方法
- Fundation中常用结构体
- 你可能不再需要Underscore
- 命令行选择
- log4j配置
- 使用Java爬虫得到CSDN博客信息并保存(一)