UVa:10940 Throwing cards away II

直接模拟会超时。我优化了N次还是超时。最后想到打表,结果50W的数据大约有15M,打开就崩了。。

后来一看打的表就发现其中的数学规律了。

其中规律,看代码吧。

 

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int p[25];
int Search(int v)
{
    int t;
    for(int i=1;i<=20;++i)
        if(p[i]>=v)
        {
            t=i;
             break;
        }
    return p[t-1];
}
int main()
{
    for(int i=0;i<=20;++i)
        p[i]=pow(2.0,i);
    int n;
    while(scanf("%d",&n)&&n)
    {
        int m=Search(n);
        if(n%m==0)
            printf("%d\n",n);
        else
            printf("%d\n",n%m*2);
    }
    return 0;
}


 

你可能感兴趣的:(数学)