Being a nonconformist, Volodya is displeased with the current state of things, particularly with the order of natural numbers (natural number is positive integer number). He is determined to rearrange them. But there are too many natural numbers, so Volodya decided to start with the first n. He writes down the following sequence of numbers: firstly all odd integers from 1 to n (in ascending order), then all even integers from 1 to n (also in ascending order). Help our hero to find out which number will stand at the position number k.
Input
The only line of input contains integers n and k (1?≤?k?≤?n?≤?1012).
Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.
Output
Print the number that will stand at the position number k after Volodya's manipulations.
Examples
Input
10 3
Output
5
Input
7 7
Output
6
Note
In the first sample Volodya's sequence will look like this: {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}. The third place in the sequence is therefore occupied by the number 5.
問題鏈接:https://cn.vjudge.net/contest/279624#problem/B
問題簡述:n個(gè)數(shù)重新排序并進(jìn)行查詢
問題分析:
1.n是奇數(shù),k位置鎖定在n/2+1前后并有遞推公式
2.n是偶數(shù),k位置鎖定在n/2前后并有遞推公式
程序說明:剛開始的想法:思路是把奇數(shù)和偶數(shù)重新復(fù)制到新的兩個(gè)數(shù)組在進(jìn)行搜索,但發(fā)現(xiàn)會(huì)出現(xiàn)運(yùn)行時(shí)間錯(cuò)誤問題 建議少使用數(shù)組,使用時(shí)是最好有提示數(shù)據(jù)不大
程序如下:
#include<iostream>
using namespace std;
int main()
{
long long int n, k;
cin >> n>>k;
if (n%2 == 0)
{
if (k <= n / 2)
{
cout << 2 * k - 1;
}
else cout << 2 * (k-n/2);
}
else
{
if (k <= n / 2 + 1)
{
cout << 2 * k - 1;
}
else cout << 2 * (k - n / 2-1);
}
system("pause");
return 0;
}