Throwing cards away II UVA - 10940(规律)

题目链接:Throwing cards away II UVA - 10940

题目大意:给出一个1~n的序列表示一堆牌,1在牌顶,n在牌底。每次从牌顶取两张,第一张弃掉,第二张放到牌低,求最后剩下的牌。

ans[2n+k]=2*k(1<=k<2n)
注:ans[1]=1

#include 
#include 

using namespace std;

const int N=5e5;

int f[N+1];

int main()
{
    f[1]=1;
    for(int k=1;(1<<k)<=N;k++)
        for(int i=1;i<(1<<k)&&(1<<k)+i<=N;i++)
            f[(1<<k)+i]=2*i;

    int n;
    while(~scanf("%d",&n)&&n)
        printf("%d\n",f[n]);

    return 0;
}

你可能感兴趣的:(Begining)