题解 CF1023B 【Pair of Toys】

MorsLin

2018-08-19 09:45:16

Solution

### 题目大意 输入两个数$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$ ```cpp #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; } ```