这道题目想想稍微有些难,但转换为代码后有十分简短。
来讲讲我的思路:
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;
}

谢谢支持鸭!