赛码网刷题记录acmcoder
说明
代码均在
基本算法
约会
【难度】★☆☆☆☆ 【通过率】68% 【题解】求出曼哈顿距离 s ‾ overline s s,声称的距离 s s s不能比 s ‾ overline s s小并且考虑到走过了必须要折返所以要满足 { s ≥ s ‾ s ≡ s ‾ ( m o d 2 ) left{ egin{aligned} &sgeqoverline s\ &sequivoverline spmod{2}\ end{aligned} ight. { s≥ss≡s(mod2) 【时间复杂度】 O ( 1 ) O(1) O(1) 【代码】acmcoder2020031601Main.java
约德尔测试
【难度】★☆☆☆☆ 【通过率】71% 【题目分析】字符串简单变化+计数统计 【题解】模拟即可 【时间复杂度】 O ( l e n ) O(len) O(len) 【代码】acmcoder2020031701Main.java
公交车乘客
【难度】★☆☆☆☆ 【通过率】85% 【题解】模拟即可,不用存上下车人数数组 【时间复杂度】 O ( n ) O(n) O(n) 【空间复杂度】 O ( 1 ) O(1) O(1) 【代码】acmcoder2020031801Main.java
研究生考试
【难度】★☆☆☆☆ 【通过率】86% 【题解】模拟 【代码】acmcoder2020042201Main.java
行编辑器
【难度】★☆☆☆☆ 【通过率】86% 【题解】模拟,题目好像没说清楚不过看样例也可以看出来,可以说就是模拟栈操作,首先字符一个一个进栈,如果遇到@就全部出栈,如果遇到#就只出栈1个(如果此时为空则不用操作),然后按照先进先出输出 【代码】acmcoder2020042202Main.java
接金币
【难度】★★☆☆☆ 【通过率】77% 【题解】动态规划,经典老题,状态转移方程为 f [ t ] [ p o s ] = m a x ( f [ t − 1 ] [ p o s − 1 ] , f [ t − 1 ] [ p o s ] , f [ t − 1 ] [ p o s + 1 ] ) + m o n e y [ t ] [ p o s ] f[t][pos]=max(f[t-1][pos-1],f[t-1][pos],f[t-1][pos+1])+money[t][pos] f[t][pos]=max(f[t−1][pos−1],f[t−1][pos],f[t−1][pos+1])+money[t][pos],另外如果从时间1递推求到最后的话还要在时间 t t t中再找一个最大值(因为最终位置不确定),但是如果让时间倒转(对称性角度,即接金币就变成了抛金币,可以想见接金币最多的那个路径被倒转过来一定变成了抛金币最多的路径,所以解的值是一样的)则由于最初时间的起始位置就是在中间,所以直接输出 f [ t ] [ m i d d l e ] f[t][middle] f[t][middle]即可,时间倒转在本题只是一个技巧,可以不用 【代码】acmcoder2020042203Main.java
下起楼来我最快(WA)
【难度】★★☆☆☆ 【通过率】89% 【题解】分类讨论,第一种情况,人比电梯快那么没啥好说的人直接走下来,第二种情况,电梯比人快且电梯在当前楼层之上,那么就是坐电梯下来(直接电梯降到1层外加开关门时间,与具体在哪一层停下来接人无关)和人直接走下来两个当中看哪个快,第三种情况,电梯比人快且电梯在当前楼层之下,那么就是一种是人直接走下来另一种就是电梯要上升到某一层再降到1层(这个层数就与答案有关了,相当于人和电梯的相遇问题) 【代码】acmcoder2020042204Main.java(过60%)
