A. Even Odds
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.
问题链接:
http://codeforces.com/problemset/problem/318/A
问题简述:
输入n 然后表示自然数1-n 奇数排前半边 偶数排后半边 输入k 表示你要的第k个数 并输出k
问题分析:
看到有规律的数 所以不用数组存就可以做了 先判断数的数量 如果是偶数个 那就是奇数偶数55分(比如10个数 就5个奇数在前 5个偶数在后) 如果是奇数个 那就是奇数比偶数多一个 (比如11个数 6个奇数在前 5个偶数在后) 之后判断k在奇数段还是在偶数段(n/2或者n/2+1为分界) 取出来就好了
代码:
#include <iostream>
using namespace std;
int main()
{
long long int n, k,temp;
cin >> n >> k;
if(n%2==0)
{
if (k <= n / 2)
{
temp = 2 * k - 1;
cout << temp << endl;
}
else
{ temp = 2 * (k - n / 2);
cout << temp << endl;
}
}
else
{
if (k <= n / 2+1)
{
temp = 2 * k - 1;
cout << temp << endl;
}
else
{
temp = 2 * (k - n / 2-1);
cout << temp << endl;
}
}
return 0;
}