T1
水题,跑两遍 d i j k s t r a dijkstra dijkstra 求单源最短路就行了。
T2
考试时有一个肯定不能过的想法,就是从每个
‘
+
’
‘+’
‘+’开始,跑
b
f
s
bfs
bfs,然后对于每个点更新为最小值。
然鹅,写挂了…
正解:
对空格建
A
,
B
A,B
A,B 两份图,
A
A
A 内部只连横边,
B
B
B 内部只连竖边,长度都为
0
0
0。
考虑把转弯表示成在
A
,
B
A,B
A,B 之间切换。即对每个空格,在
A
,
B
A,B
A,B 之间连长度为
1
1
1 的边。以两图中的每个为
+
+
+ 的点为源,做多源最短路。
某空格的答案就是它在
A
,
B
A,B
A,B 中对应的两点的最短路取
m
i
n
min
min 再加 。
T3
啊啊啊!!!(土拨鼠尖叫
.
j
p
g
.jpg
.jpg
暴力
30
30
30 分莫名其妙就挂了!!!
30
30
30:暴力很好想,递推即可。
50
50
50:在暴力的基础上特判
k
=
0
k=0
k=0 且
n
=
m
n=m
n=m 的情况,即求卡特兰数的第
n
−
1
n-1
n−1 项。由于
m
o
d
=
999911659
=
2
∗
3
∗
4679
∗
35617
+
1
mod=999911659=2*3*4679*35617+1
mod=999911659=2∗3∗4679∗35617+1,所以可以对每个质数求组合数,在用中国剩余定理即可。
70
70
70:可以考虑用从
(
0
,
0
)
(0,0)
(0,0) 走到
(
n
−
1
,
m
−
1
)
(n-1,m-1)
(n−1,m−1) 的总方案数减去
x
>
y
x>y
x>y 不合法的方案。具体做法在之前老师讲过,略。
100
100
100:考虑容斥。
设从
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0) 走到
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1) 的方案数为
p
a
t
h
s
(
x
0
,
y
0
,
x
1
,
y
1
)
paths(x_0,y_0,x_1,y_1)
paths(x0,y0,x1,y1)。
设
f
[
i
]
f[i]
f[i] 表示到达第
i
i
i 个危险点,并且不到达其他的危险点的总方案数。
转移方程为:
f
[
i
]
=
p
a
t
h
s
(
0
,
0
,
x
i
,
y
i
)
−
∑
x
j
≤
x
i
,
y
j
≤
y
i
p
a
t
h
s
(
x
j
,
y
j
,
x
i
,
y
i
)
f[i]=paths(0,0,x_i,y_i)-\sum_{x_j≤x_i,y_j≤y_i}paths(x_j,y_j,x_i,y_i)
f[i]=paths(0,0,xi,yi)−∑xj≤xi,yj≤yipaths(xj,yj,xi,yi)。
p
s
ps
ps:由于数据水随机,直接输出
1
1
1 会有意想不到的收获。