A. Even Odds(找规律解法)

Even Odds

time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output

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.

这道题是寒假集训遇到的,emm。。。不知为什么就是想记录一下下,找规律就行。
VJ通过的代码:

#include<iostream>
using namespace std;
int main()
{
	long long n, k, j, re;
	while (cin>>n>>k)
	{
		j = (n + 1) / 2;//输入的n无论是奇数还是偶数,
		                //在程序里1到n里面奇数的个数都是等于(n+1)/2的
		                //括号里加个1是因为:
		                //如果不加一,那么只有当n为偶数时,j才是1到n中奇数的个数了
		if (k >j )//k>j即表示第k个数不在奇数里面而是在后面的偶数里面
		          //因为你奇数就是有j个嘛,你k都大于j了,不就是在所有奇数的后面了吗
		{
			re = 2 * (k - (n + 1) / 2 );//相当于re=2k(此k非彼k),既是从偶数里面计算
			                            //实际的第k个数就是偶数里面的第k-j个数
			cout << re << endl;
		}
		else
		{
			re = 2 * k - 1;//相当于re=2k-1
			cout << re << endl;
		}
	}
}

祝大家幸福,嘿嘿嘿

猜你喜欢

转载自blog.csdn.net/weixin_43697280/article/details/86586714
今日推荐