传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1432

Solution

结论题,看一下图

这样是最优情况。
自己拿笔描一下很容易发现从上往下每层多一个点,而每个点连出去两段,所以答案为k*2。又发现,我们可以把图上下翻转一下,和原图上下对称,此时的答案为(n-k+1)×2,两种情况取最小值就可以了。
特别的,当n=1时答案为1。

Code

1
2
3
4
5
6
7
8
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int n,k;
scanf("%d%d",&n,&k);
printf("%d",n==1?1:min(k,n-k+1)*2);
}
文章目录
  1. 1. Solution
  2. 2. Code