您的位置:首页 > 其它

Humble Numbers USCAO chapter 3.1

2013-09-24 23:15 369 查看
...目测我自己写坑定超时,就去NOCOW看了下,题解,官方是每个质数与已有的humble想乘取大于最大humble的最小数即是新的最大humble,

然后我就写了个个,开始嫌麻烦用set存,超时的飞起。然后全部改成数组,结果case 6还是超时,想了半天感觉和别人的题解也没啥差别,为什么运行时间差这么多

后来试着把69行的循环初始条件改成i=0,改成i=1,瞬间过了....后来一想确实i=0 没用啊,而且case 6求第100000个,白白循环100000次....



/*

ID: hubiao cave

PROG: humble

LANG: C++

*/

#include<iostream>

#include<fstream>
#include<algorithm>
#include<set>
#include<cstring>

using namespace std;

int main()

{

ifstream fin("humble.in");
ofstream fout("humble.out");
int prim[102];
int humble[100002];

int more[102];

memset(humble,0,100002*4);
memset(prim,0,102*4);

int lastInd[102];
for(int i=0;i<102;i++)
lastInd[i]=0;

int cnt,number,temp;
int hlen=0;
fin>>cnt>>number;
for(int i=0;i<cnt;++i)
{
fin>>temp;
prim[i]=temp;
}
prim[cnt]=1;
sort(prim,prim+cnt+1);
humble[0]=1;
hlen++;

while(hlen<=number)
{

int lasthumber=humble[hlen-1];
int cnt1=0;
int* pmin=0;
int mcnt=0;

for(int i=1;i<=cnt;i++)
{

for(int j=lastInd[cnt1];j<hlen;j++)
{
if(prim[i]*humble[j]>lasthumber)
{
more[mcnt++]=prim[i]*humble[j];
lastInd[cnt1]=j;
break;
}

}
cnt1++;
}

pmin=min_element(more,more+mcnt);
humble[hlen++]=*pmin;

}

fout<<humble[hlen-1]<<endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: