20160402(俄罗斯方块)
代码1
用int pane[16][11]表示面板,用int block[5][5]表示一个板块,用int row, col 表示板块在当前面板中的位置。在每次下降前,都要判断是否有板块中的方块在面板中的方块上面和到达面板最底部,若是则停止下降,否则,继续下降。停止下降后将板块补充到面板中。
我对下降到最底部的理解弄疏忽了,比如下面的块:
1 | 0 0 0 0 |
不是说第4行到了pane的15行就算到底了,这个是错的,因为第4行为空,而是第3行到底了才算。
1 | //freopen("D://input.txt","r",stdin); |
当block停止的时候,在方块补充到面板的过程中出错了,50行,注意对于0,要忽略,否则可能会把pane中原本为方块的地方变为没有方块,这肯定是错的。
20160403(路径解析)
代码1
一个路径经过正规化操作后,其指定的文件不变,但是会变成一个不包含 . 和 .. 的绝对路径,且不包含连续多个 / 符号。
若路径为空字符串,则正规化操作的结果是当前目录。(特判)
如果一个路径以 / 结尾,那么它代表的一定是一个目录,正规化操作要去掉结尾的 /
在进行路径解析的过程中,要建立一个栈,表示当前的路径。比如先输入了/d2/d3 ,栈中就为/, d2, d3 ,再输入/d2/d4/f1,栈就变为/, d2, d4, f1 了。
1 | //freopen("D://input.txt","r",stdin); |
50分。注意29行,当path中只有根目录时,不要再pop了,这时.. 指令无效了。我只得了50分的原因是,题意说的很不清楚,因为题目中给的p个路径全都是基于第一条路径的,而不是上一条路径,我记得以前也犯过这个错误,现在又犯了。
20160404(游戏)
代码1
用array<int,2> barrels[MAXN][MAXM]来表示每个方格的障碍时间。用set<int> vis[MAXN][MAXM 表示每个每个方格在哪些时间点被访问过,一个方格不能同时被多个相同的时间点访问。采用BFS进行遍历。
1 | //freopen("D://input.txt","r",stdin); |
我一开始超时了,原因是10行我原来写的是set<int> vis[MAXN][MAXM] ,每次查询的时间复杂度为log n级别,但是我用了一个trick,把它换成unordered_map<int,int> vis[MAXN][MAXM],时间复杂度就变成了1,原因是unordered_map是使用hash表实现的,比set要快速。最后的最高时间为703ms。