题解 | #猜数#
猜数
http://www.nowcoder.com/practice/3eb9a66c7fa24b90845271f6b80b7092
这道题目想想稍微有些难,但转换为代码后有十分简短。
来讲讲我的思路:
1.先找出行域范围:1<=a,b<=x且a+b=y
2.接着直接数a,a从1数到x,也就是说左边的数字a从1开始数,要满足b=y-a<=x,即a>=y-x,则a的下界为max(1,y-x)
3.最多又只能数到x,此时得到上届,为x,但又不能超过y,因此a的上届为min(x,y),且还要把存在了相等的情况去掉(比如a=b的情况)
4.去掉了之后再除以2,去除重复的情况。
下面贴代码:
#include<bits/stdc++.h> using namespace std; int main() { long x, y; cin >>x>>y; if(x>=y) cout<<(y-1)/2<<endl; else { if(x<y/2) cout <<0<<endl; else cout <<x-y/2<<endl; } return 0; }
谢谢支持鸭!