2019-01-21-B

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个数重新排序并进行查询
问题分析:
1.n是奇数,k位置锁定在n/2+1前后并有递推公式
2.n是偶数,k位置锁定在n/2前后并有递推公式

程序说明:刚开始的想法:思路是把奇数和偶数重新复制到新的两个数组在进行搜索,但发现会出现运行时间错误问题 建议少使用数组,使用时是最好有提示数据不大
程序如下:

#include
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;
}



你可能感兴趣的:(2019-01-21-B)