Tea---hdu5881(规律)

时间:2021-11-28 15:54:23

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5881

题意: 现在有一壶水,体积在[L, R]范围内,现有两个空杯子,现想要把这壶水倒入这两个杯子中去,使得壶中剩余的水的体积<=1,并且两个杯子的体积差<=1;求最少需要到多少次;

题解:当R<=1的时候,很明显是不需要倒的,符合条件;当R==2的时候,只需倒一次即可; 当R>2时,我们可以先往第一个杯子中到 L/2,第二个杯子到 (L+1)/2,这样最大化的情况下就是还剩余R-L-1,然后把这些每次倒入体积2(这样才能保证两个杯子的体积差<=1)的进入每个杯子,直到体积剩下<=1即可; 整理一下结果就是max(2, (R-max(1, L)/2)+1);

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#include<set>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define N 100005
#define INF 0x3f3f3f3f
typedef long long LL; int main()
{
LL L, R;
while(scanf("%I64d %I64d", &L, &R) != EOF)
{
if(R<=)
printf("0\n");
else if(R<=)
printf("1\n");
else
{
printf("%I64d\n", max( (R - max(L, 1ll))/+1ll, 2ll));
}
}
return ;
}