结论题的特点是:代码往往都很短……
我先说一下答案:n=1的时候输出1,其余时候输出2*k,假如k>(n>>1)的话,令k=n-k+1(因为1和n-1是对称的)。
为什么呢……
我们画一个图。
这是5条直线(函数)。可以看到,这些点以
A
BC
DEF
GHIJ
的方式排列。
第一个部分只经过A(这样一定是最优的)
第二个部分只经过BAC
第三个部分只经过DBECF……
1
1+2
2+3
3+4……
线段数比点数多一,所以就是
2
4
6
8……
特别地,当n=1时是1。
#include<iostream>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
if(n==1) cout<<"1";
else{
if(k>n/2) k=n-k+1;
cout<<2*k;
}
return 0;
}