题目描述
牛牛和妞妞正在玩一个猜数游戏,妞妞心里想两个不相等的正数,把这两个正数的和y告诉牛牛。
妞妞声称这两个数都不超过x,让牛牛猜这两个数是多少。
牛牛每猜一次,妞妞会告诉他猜对了还是猜错了,猜对了就停止游戏,猜错了就直到牛牛猜对为止。
妞妞为了加大难度,有时会误报x的大小,如果牛牛可以判断出了这个x是错误的,就会直接询问妞妞答案。
牛牛最坏情况下要猜多少次才能猜到妞妞想的数呢?
输入描述:
两个整数x,y。1<=x,y<=1014。
输出描述:
一个数n,表示牛牛在最坏情况下猜测的次数。
示例1
输入
7 10
输出
2
示例2
输入
4 10
输出
0
思路:我们考虑分情况讨论:
首先剔除掉特殊情况:2*x>y,此时我们能够直接判断出妞妞给出的是错误的x,因为若两个数都小于等于x,则两数之和此时不可能为y!
若x>=y,此时我们知道两个数中最大的数为y,另一个数为0,因此最坏的猜测次数是(y-1)/2【除以2是因为比如说两个数是2和3,则a=2,b=3与a=3,b=2是等价的】
若x<y,此时其中一个数的最大值为x,另一个数为y-x,因此最坏情况下的猜测次数是{x-(y-x)}/2=x-y/2
#include<stdio.h>
#include<algorithm>
using namespace std;
#define ll long long
ll x,y;
int main(void){
scanf("%lld%lld",&x,&y);
if(x*2<=y)
printf("0\n");
else{
if(x>=y)
printf("%lld\n",(y-1)/2);
else
printf("%lld\n",x-y/2);
}
return 0;
}