题意:有一壶水,不知道有多少升,但是知道在[L,R]。每次可以向两个茶杯中倒一定量的茶,(可以控制多少),每次倒完之后可以知道茶壶里面是不是空的。最终的目标是控制两个茶杯中的茶不超过1升,茶壶中剩余不超过1升。问最多多少次可以完成要求。
思路:可以分析,最优的策略就是先向一个茶壶中到(L+1)/2 ,另外一个倒(L+3)/2升,然后交替到2升,再排除一些特例就好了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long l,r;
while(scanf("%lld%lld",&l,&r)!=EOF) {
if(r<=1) {
printf("0\n");
continue;
}
if(r<=2) {
printf("1\n");
continue;
}
if(r-l<4) {
printf("2\n"); continue;
}
if(l==0) {
printf("%lld\n", (r+1)/2 );
continue;
}
if(l==1) {
printf("%lld\n", (r+1)/2 );
continue;
}
printf("%lld\n", (r-l)/2+1 );
}
return 0;
}