UVA136解题报告
2017-05-11 06:48
375 查看
先来份错误代码,亲爱的小伙伴们,希望你们能找到其中的问题,顺便说一句,用的是广搜
上面是我用很短的时间写出来的很漂亮的代码,如果说有什么不完美的地方,那就是他是错的。
有两点决定了他是错的,一,没有从小到大排序,这样实际上并不能确定谁是第1500个丑数,改进方法是用优先队列
二,同一个丑数可以有不同的生成方式,没有现判断该丑数是否已生成是第二个错误,改进方法是加入set判断
AC代码如下time0ms
#include<cstdio> #include<queue> usingnamespacestd; intmain() { queue<longlong>q; intans=1; q.push(1); while(ans!=1500) { longlongx=q.front(); q.pop(); q.push(x*2);q.push(x*3);q.push(x*5); ans++; } printf("%d\n",q.front()); return0; }
上面是我用很短的时间写出来的很漂亮的代码,如果说有什么不完美的地方,那就是他是错的。
有两点决定了他是错的,一,没有从小到大排序,这样实际上并不能确定谁是第1500个丑数,改进方法是用优先队列
二,同一个丑数可以有不同的生成方式,没有现判断该丑数是否已生成是第二个错误,改进方法是加入set判断
AC代码如下time0ms
#include<cstdio> #include<queue> #include<set> #include<vector> usingnamespacestd; typedeflonglongLL; intd[]={2,3,5}; intmain() { set<longlong>s; priority_queue<LL,vector<LL>,greater<LL>>q; intans=1; s.insert(1); q.push(1); while(ans!=1500) { longlongx=q.top(); q.pop(); for(inti=0;i<3;i++) { longlongy=x*d[i]; if(!s.count(y)){s.insert(y);q.push(y);} } ans++; } printf("The1500'thuglynumberis%lld.\n",q.top()); return0; }
再来份搞笑版的代码,可以AC哦
#include<cstdio>
usingnamespacestd;
intmain()
{
printf("The1500'thuglynumberis859963392.\n");
return0;
}
相关文章推荐
- UVA 10098 Generating Fast 解题报告
- UVa 12100 printer queue 解题报告
- UVa 1450 Airport 解题报告(二分+策略)
- uva10003 Cutting Sticks解题报告
- Uva 11076 Add Again 解题报告(组合数学)
- 解题报告 之 UVA1152 4 Values Whose Sum is Zero
- Uva 11461 - Square Numbers 解题报告(水题)
- Uva 10081 - Tight Words 解题报告(递推)
- Uva 311 - Packets 解题报告(贪心)
- [leetcode]136. Single Number@Java解题报告
- uva 101 The Blocks Problem 解题报告
- uva10603 解题报告
- 解题报告 之 UVA116 Unidirectional TSP
- 【解题报告】UVA10603 Fill BFS
- UVAlive 6160 Countdown 解题报告
- uva10935解题报告
- uva490解题报告
- UVA1368解题报告
- 【解题报告】uva111_History Grading(历史考试, dp, LCS)
- UVALive 5791 Candy's Candy 解题报告