题目大意
输入两个数$n,k$,问从$1$~$n$中取出$2$个数使得它们的和为$k$的方案数($(a,b)$和$(b,a)$算同一种方案)
题解
如果$a+b==k$,那么$(a+1)+(b-1),(a+2)+(b+2)$……也等于$k$。所以我们可以找到最接近的两个数$k/2,k/2+1$,然后$1$~$k/2$和$(k/2+1)$~$(k{-}1)$就是所有的方案。接下来我们只需要找出合法的方案数就可以了
首先我们可以确定如果$k/2{>=}n$,肯定无解,当$k/2{<}n$的时候,因为$n$可能小于$k$,所以合法的方案数应为$\min(k/2,(k-1)-k/2,n-k/2)$
P.S. 不要忘了开$long\; long$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
long long n,k; cin>>n>>k;
long long mid=k/2,ans;
if(mid<n) ans=min(mid,min(k-1-mid,n-mid));
else{
cout<<0; return 0;
}
cout<<ans;
return 0;
}