2019牛客国庆集训派对day3 时间旅行(思维)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019牛客国庆集训派对day3 时间旅行(思维)相关的知识,希望对你有一定的参考价值。
现在 B o b Bob Bob在数轴点 t 0 t_0 t0,要回到 [ 0 , h 0 ] [0,h_0] [0,h0]中
当处于数轴上 t t t点时,可以选择一个 x x x满足 ⌈ x h ⌉ ∗ h < = c \\lceil \\frac{x}{h} \\rceil*h<=c ⌈hx⌉∗h<=c
时间机器会在 [ 0 , x ] [0,x] [0,x]随机选择一个数 y y y回到 t − y t-y t−y处,同时燃料变成 c − y c-y c−y
现在为了保证能回到 [ 0 , h 0 ] [0,h_0] [0,h0],求出最大的距离 T T T
可以想象,如果点 k k k无法回到 [ 0 , h 0 ] [0,h_0] [0,h0],那么 k k k以后的点也必然不能
因为时间机器是完全随机的,那么可以假定最坏情况,每次走 1 1 1步
那么就要求 [ h 0 + 1 , k − 1 ] [h_0+1,k-1] [h0+1,k−1]都是完全保证能回到 [ 0 , h 0 ] [0,h_0] [0,h0]的
我们再看看这个式子 ⌈ x h ⌉ ∗ h < = c \\lceil \\frac{x}{h} \\rceil*h<=c ⌈hx⌉∗h<=c
进一步可以得到 x x x的取值范围是 [ 0 , c − c % h ] [0,c-c\\%h] [0,c−c%h]
换句话说,当 c < h c<h c<h时, x x x取值范围永远是 0 0 0,走不动,所以无法回到 [ 0 , h 0 ] [0,h_0] [0,h0]
那么当 c > h c>h c>h呢??因为时间机器的随机性,我们不管怎么选 x x x
设起点为 f f f,那么途径的点是 f − 1 , f − 2 , f − 3... h 0 f-1,f-2,f-3...h_0 f−1,f−2,f−3...h0
这也要求期间每个位置的 c c c都要大于 h 0 h_0 h0
其实答案就是 c − 1 c-1 c−1了
#include<bits/stdc++.h>
using namespace std;
int h,c;
int main()
{
while( cin >> h >> c )
{
if( c<h ) cout << h;
else cout << c+1;
cout << endl;
}
}
以上是关于2019牛客国庆集训派对day3 时间旅行(思维)的主要内容,如果未能解决你的问题,请参考以下文章
2019牛客国庆集训派对day3 J.买一送一(dfs+组合数学)
2019牛客国庆集训派对day1 F.4 Buttons(思维)
2019牛客国庆集训派对day2 J.Vertex Cover(思维,组合数学算贡献)