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次....
然后我就写了个个,开始嫌麻烦用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; }
相关文章推荐
- 正则表达式
- toj3479 Selfish Grazing
- 如何诊断 job 执行失败
- libaio under MIPS architecture /在mips架构下使用的libaio
- Android Studio使用教程(二)
- 上传下载中文乱码问题的解决
- Android Studio使用教程(一)
- 防查询语句注入漏洞攻击
- 手势识别
- underscore--之function篇
- 老手是如果教新手写程序的
- android 长连接的心跳及推送机制
- DMZ基础知识
- HTML基础之<head>篇
- 九、android的ListView实现数据列表展示
- EclipseRCP开发2-建立菜单
- 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP
- 关于自定义Adapter中更新界面的问题
- [英国][记录][战争中的世界:二战全史(26集)][BD-MKV/58G][中英双字][经典收藏]
- C# 汉字转换拼音简码和全拼音