1024 程序员日考试总结#
大过节的,考什么试啊
今天的题在洛谷上都能找到,所以就不放题面了。。
数学题(math 1S 128M)#
提交的时候电子教室卡死,拿 u 盘拷上去math.cpp
又变成了乱码。。。虽然只写了 30 分
首先,这道题直接枚举的复杂度是 $500^7$,是过不了的。
而因为余数可加、可乘的性质,所以只要统计除以 7 的余数的情况就行了,复杂度 $7^7$,跑得飞快
(洛谷 提高+/省选-
的难度是认真的吗)
套了 7 个 for 的代码我都不好意思放上来。。。
回文路径(path 1S 128M)#
打了个 dfs,荣获 8 分
正解是 dp,从左上角和右下角同时开始走,如果当前两个格子相同,状态就能转移。
i
表示走了几步,j
表示左上角出发的走到了第几行,i
表示从右下角出发的走到了第几行
第几列可以通过i
与j
或k
来计算。
f[i][j][k]=f[i - 1][j - 1][k] + f[i - 1][j][k + 1] + f[i - 1][j][k] + f[i - 1][j - 1][ k - 1]
但是,$500^3$ 的数据规模只有在 512M 以上的内存限制下才不会超(亲测),所以要压位。
因为新的状态只与i - 1
,j
,k
,j - 1
,k + 1
有关,所以压掉i
,j
倒序枚举,k
顺序枚举。
注意j
,k
的起点与步数的关系。
大都市 (city 1S 128M)#
这道题用沙拉查词带的 Google 翻译翻出来是真的魔性
hbh 大佬说这是dfs
序的模板题,学习了一下发现还真是。