文章目录
这应该是站内相对详细的解题报告吧。
转载思路请@本人。
感想
关于自己
这一次又考差了(指第二)
由于第一题调了半天没调出来,所以没拿满分,只有
90
90
90
总的来说,时间安排不合理
期待下次各位dalao能手下留情留我一个第一
关于平台
这次的题目质量说不清楚(拉掉了许多人)
有些地方描述不清楚/错误,如第二题数据范围应该是
n
≤
1
0
3
n\leq 10^3
n≤103
第一题是真的奇怪,本人用了
J
a
v
a
Java
Java、
C
C
C、
C
+
+
C++
C++全部过不去,唯独
C
+
+
C++
C++拿了
90
90
90
有时候的自测调试会把警告也提示错误,导致本来可以运行的程序只能在保存运行处提交
并且有些本来时间复杂度很低的程序莫名其妙运行无结果,也没有提示时间超限,非常疑惑
此外,由于本人的考试报告空白,所以无法提供当时的考试代码。
总而言之,系统有提升,但不多;题目有改进,但也不多。
第一题 (难度:入门但是不完全入门)
题目描述
给你两个字符串 S S S, T T T,让你从 S S S中剪下字符组成 T T T,问是否可行。
90分做法
发现数据范围很小,就直接暴力匹配。
对于每一个
T
T
T串中的字母,我们都在
S
S
S中找其对应的字母,然后删除。
注意只考虑有效字符。
如果找不到,就输出
N
o
No
No。否则输出
Y
e
s
Yes
Yes。
100分做法
我也不知道,也许是什么奇怪的判断之类的。
听说不能要空格
第二题 (难度:中等)
题目描述
给定一个只包含大小写字母的字符串 S S S,你现在可以往字符串的任意一个位置插入字符,并且可以插入若干次,问最少插入多少次可以使得 S S S变为回文串。
100分做法
因为回文串是从两端到中间都相同,所以我们考虑从两端开始匹配。
设
d
p
i
,
j
dp_{i,j}
dpi,j表示
[
i
,
j
]
[i,j]
[i,j]没有匹配的最小插入字符数。
转移:
当
S
i
−
1
=
S
j
+
1
S_{i-1}=S_{j+1}
Si−1=Sj+1时,可以直接匹配:
d
p
i
,
j
=
m
i
n
(
d
p
i
,
j
,
d
p
i
−
1
,
j
+
1
)
dp_{i,j}=min(dp_{i,j},dp_{i-1,j+1})
dpi,j=min(dpi,j,dpi−1,j+1)
对于任意情况,都可以添加字符来匹配任意一端:
d
p
i
,
j
=
m
i
n
(
d
p
i
,
j
,
m
i
n
(
d
p
i
−
1
,
j
,
d
p
i
,
j
+
1
)
+
1
)
dp_{i,j}=min(dp_{i,j},min(dp_{i-1,j},dp_{i,j+1})+1)
dpi,j=min(dpi,j,min(dpi−1,j,dpi,j+1)+1)
最后答案就在所有
d
p
i
,
i
dp_{i,i}
dpi,i和
d
p
i
,
i
−
1
dp_{i,i-1}
dpi,i−1里面,枚举所有
i
i
i求最小值即可。
注意初始化
d
p
i
,
j
=
i
n
f
,
d
p
1
,
n
=
0
dp_{i,j}=inf,dp_{1,n}=0
dpi,j=inf,dp1,n=0
第三题 (难度:简单~中等)
题目描述
给你一个矩阵,从左上角开始走,每次只能向下走一步或向右走一步,求走过路径的和的最小值。
100分做法
动态规划入门题,或者说是递推。
设
d
p
i
,
j
dp_{i,j}
dpi,j表示到达点
(
i
,
j
)
(i,j)
(i,j)的最小和。则:
d
p
i
,
j
=
m
i
n
(
d
p
i
−
1
,
j
,
d
p
i
,
j
−
1
)
+
a
i
,
j
dp_{i,j}=min(dp_{i-1,j},dp_{i,j-1})+a_{i,j}
dpi,j=min(dpi−1,j,dpi,j−1)+ai,j
最后输出
d
p
n
,
n
dp_{n,n}
dpn,n即可。
第四题(难度:中等+)
题目描述
A
A
A和
B
B
B轮流从袋子里取糖果,糖果分为甜的和普通的。
A
A
A每次取一颗,
B
B
B每次取一颗顺带扔掉一颗。
如果上述取/扔的操作概率均匀随机,求
A
A
A先取到甜糖果的概率。
100分做法
一道概率动态规划题,也可以记忆化搜索。
我们设
d
p
i
,
j
,
0
/
1
dp_{i,j,0/1}
dpi,j,0/1表示甜糖果剩下
i
i
i个,普通糖果剩下
j
j
j个,当前是
A
A
A/
B
B
B先手,当前状态的概率。
当
A
A
A先手时:
- 如果他摸到了甜糖果,游戏结束,累加答案:
a n s + = d p i , j , 0 × i i + j ans+=dp_{i,j,0}× \frac{i}{i+j} ans+=dpi,j,0×i+ji - 如果他摸到了普通糖果,游戏继续:
d p i , j − 1 , 1 + = d p i , j , 0 × j i + j dp_{i,j-1,1}+=dp_{i,j,0}× \frac{j}{i+j} dpi,j−1,1+=dpi,j,0×i+jj
当 B B B先手时:
- 如果他摸到了甜糖果,游戏结束,无转移;
- 如果他摸到了普通糖果,扔掉了甜糖果:
d p i − 1 , j − 1 , 0 + = d p i , j , 1 × j i + j × i i + j − 1 dp_{i-1,j-1,0}+=dp_{i,j,1}× \frac{j}{i+j}× \frac{i}{i+j-1} dpi−1,j−1,0+=dpi,j,1×i+jj×i+j−1i - 如果他摸到了普通糖果,扔掉了普通糖果:
d p i , j − 2 , 0 + = d p i , j , 1 × j i + j × j − 1 i + j − 1 dp_{i,j-2,0}+=dp_{i,j,1}× \frac{j}{i+j}× \frac{j-1}{i+j-1} dpi,j−2,0+=dpi,j,1×i+jj×i+j−1j−1
至此,转移结束。
最后答案就是
a
n
s
ans
ans。
记得初始化
d
p
n
,
m
=
1
dp_{n,m}=1
dpn,m=1。