Codeforces Problem-318A Even Odds
基本思想:
本题大意很简单,考虑到n与k的范围很大,如果开数组或者vector容器可能会出问题(Memory Limit Exceeded),所以这道题的本质是找规律。
- 当n为偶数时,数列为1、3、5…n-1、2、4、6…n,显然,若k≤n/2时,第k个数为2k-1;否则,第k个数为2(k-n/2)。
- 当n为奇数时,数列为1、3、5…n、2、4、6…n-1,显然,若k≤n/2+1时,第k个数为2k-1;否则,第k个数为2(k-n/2-1)。
AC代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ll n,k;
cin>>n>>k;
if (n%2==0)
{
if (k<=n/2)
cout<<2*k-1<<endl;
else
cout<<2*(k-n/2)<<endl;
}
else
{
if (k<=n/2+1)
cout<<2*k-1<<endl;
else
cout<<2*(k-n/2-1)<<endl;
}
return 0;
}