题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=5881
解:
首先向一个杯子倒 L/2 升水,再往另一个杯子倒 L/2+1 升水。接下来就来回往两个杯子里倒 2 升,直到倒空为止。这样就很容易分析出需要倒水的次数。唯一注意的是最后壶里面可以剩下 1 升水,可以省一次倒水的操作,可得规律(R-L)/2+1。
特殊情况:当R == L 或 R == L+1时,上述规律不成立,倾倒次数应该为2次,每次各L/2升水;当R <= 1时,倾倒次数为0;当R == 2时,倾倒次数为1;当L == 0时,第一次倾倒应该为1。
#include <cstdio>
using namespace std;
typedef long long ll;
int main()
{
ll l,r;
while(~scanf("%lld%lld", &l, &r))
{
if(r <= 1)
printf("0\n");
else if(r == 2)
printf("1\n");
else if(l == r-1 || l == r)
printf("2\n");
else
{
if(l < 1)
l = 1;
printf("%lld\n", (r-l)/2+1);
}
}
return 0;
}