G - Tea HDU - 5881
这一题的复杂之处在于考虑到各种各样的情况
#include<iostream>
using namespace std;
typedef long long LL;
int main(void)
{
long long l,r;
while(cin>>l>>r)
{
if(r<=1)
cout<<0<<endl;//如果r小于1,不需要倒茶
else if(r==2)//如果r==2,只需要倒一次
cout<<1<<endl;
else if(r==l||r==l+1)//如果有两者相差1或者相等,需要倒两次
cout<<2<<endl;
else
{
if(l == 0)
cout<<(r-1-l)/2<<endl;//注释1
else
cout<<1+(r-l)/2<<endl;//注释2
}
}
return 0;
}
注释2
每次倒茶之后一杯里面的茶的容量
1 low/2+0.5
2 low/2+0.5+1 总和 low +2
3 low/2+0.5+1+1 总和 low + 4
4 low/2+0.5+1+1+1 总和low + 6
……….
所以这种情况下
upper - low 是奇数,则与upper-low-1的次数相同,表示最后剩下1unit
奇数 Count = (upper-low-1)/2+1;//其中(upper-low-1)/2==(upper-low)/2
如果是偶数,则没有剩下
偶数 Count = (upper-low)/2+1;
即 Count = (upper-low)/2+1;
注释1
1 1
2 2 总和 3
3 3 总和 5
4 4 总和 7
……………
这种情况下
(upper-low) = 奇数 (upper-low)/2 + 1 其中(upper-low)/2 == (upper-low-1)/2
= 偶数 (upper-low-1)/2+1
即 = (upper-low-1)/2+1;