021. 白书 算法青春
几个月学的知识点在脑海中翻涌,郭晓川努力寻找其中千丝万缕的联繫,试图与剩下的题目建立某种微妙的匹配。
再看排名,前面 9个人里,有人多过了一道题,这题很像是动態规划,但之前稀里糊涂练过的两题,根本提取不出任何能带来头绪的经验。
还剩一小时,剩下的三题中只能押注一题,没半点容错空间了。
所有题都已读完,只有一道无人碰过的题隱约有些思路——搜索!
不管了,写!
提交,tle(运行超时)。
优化!
虽然结果是 tle,运行时间顶格显示为题目的 2秒运行时限,但郭晓川在本地模擬了一组最大的数据,似乎並没有比 2秒慢很多。
继续优化!他下定决心。
集训时尹学长推荐过 poj 1011,是一道穷举所有可能將小棍子拼成相同长度棍子的题,他说那道题虽然理论复杂度不算是个“正確的题”,却能练优化思路,也就是“剪枝”——用各种办法排除搜索时没必要的分支。
用为数不多的搜索优化经验,让这份代码快一些,再快一些。
剪!——tle。
再剪!——还是 tle。
接著剪!——依旧 tle。
比赛时间还剩 20分钟,郭晓川的排名掉到了第 12。
还有什么遗漏的?他开始从头梳理题目条件。
poj 1011断断续续憋了 3天,没搜题解,硬是自己卡出了 ac。
眼下这个题一定也可以的!一定!
排序、调换顺序、预处理、翻转逻辑……该试的都试了,还差什么?还差什么?
好像就差一点点!也许是几百毫秒,也许是几十毫秒!
还剩 10分钟。
再一次翻遍了代码中每条逻辑。
还剩 5分钟。
进不了校队了吗?努力都白费了吗?
念头冒出来,郭晓川猛地摇头。不行!再想!
视线飞速扫著代码。
`printf`?
`while`?
`dfs`?
`break`?
`scanf`?
`scanf`!!!
编译器的书里对`scanf`缓存区的討论突然衝进脑海。
由於维护內部状態及格式解析的开销,它的速度比直接获取字符的`getchar()`慢,如果先用`getchar()`把输入读成字符,再一次性转为数字呢?
快没时间了,写!手速推到极限。
最后 2分钟,郭晓川提交了修改后的代码。
“pending”(等待评测)的状態十分短暂,却又像一个世纪那么长。
突然状態一闪,1930epted”(通过),卡在时限內 ac!
郭晓川不受控制地喊了一声:“cao!”引得周围几人侧目,彭峰也被嚇了一跳。
没有封榜的排名仍在实时更新,郭晓川的名字跳到了第 5。
最后的时间,榜单没有发生新的变化,比赛结束。
如同被抽走了所有力气,他整个人瘫在座位上,弓著背盯著屏幕,一动不动。
机房比以往的比赛结束更躁动一些,大多数人纷纷起身或离开座位,有的已经在收拾资料准备离开,有的三三两两围在一起,打开了四次个人赛的排名窗口指指点点。
眼前的排名页显示:
1.苏明
2.曹象
3.刘建
4.吕良
5.郭晓川
……
本章未完,点击下一页继续阅读。(1 / 2)