A. Doors and Keys
判读大写字母出现前是否出现过对应的小写字母即可。
B. Anti-Fibonacci Permutation
题意:
构造 n 个满足要求的排列(
i
≥
3
,
p
i
−
2
+
p
i
−
1
≠
p
i
i \geq 3, p_{i-2}+p_{i-1} \ne p_i
i≥3,pi−2+pi−1=pi)。
构造方法:
把 2 到 n 降序放置,把 1 插入这 n-1 个数的不同位置即可。
eg:当 n = 5 时,有:
5 4 3 2 1
5 4 3 1 2
5 4 1 3 2
5 1 4 3 2
1 5 4 3 2
C. Increase Subarray Sums
题意:
给一个大小为 n 的数组,其价值为
m
a
x
(
0
,
m
a
x
(
a
i
+
0
+
…
+
a
i
+
j
)
)
(
1
≤
i
≤
i
+
j
≤
n
)
max(0, max(a_{i+0} + … + a_{i+j})) (1 \leq i \leq i+j \leq n)
max(0,max(ai+0+…+ai+j))(1≤i≤i+j≤n)。
对于任意的 k (
0
≤
k
≤
n
0 \leq k \leq n
0≤k≤n),选择 k 个不同的位置,给对应的元素加 x。依次输出操作后的数组的价值。
思路:
贪心,要增加的 k 个数交给的区间即可。
定义
f
i
f_i
fi 表示数组长度为 i 的连续子序列和的最大值,则
r
e
s
=
f
i
+
m
i
n
(
i
,
k
)
∗
x
res = f_i + min(i, k) * x
res=fi+min(i,k)∗x。
D. Cross Coloring
题意:
给一个 n * m 的网格进行 q 次染色。
第 i 次染色将在 k 中颜色中任选一种,染给第
x
i
x_i
xi 行和第
y
i
y_i
yi列。
问最后将得到多少种染色结果。
思路:
q 次操作结束后,没有被完全覆盖的操作对应的格子的颜色可以在 k 个颜色中任选。统计有几次操作不会被完全覆盖即可。
后边的操作一定不会被前边的操作覆盖。倒着统计 q 次颜色,对于第 i 次染色的行或列没有被颜色时,本次操作染色的格子将不会被完全覆盖。注意,当行或列都被染过后就不需要统计。
在 2 * 10 的格子中,最后两次操作分别染第一行和第二行,这时全部的行都被染色,前 q-2 次染色结果一定被覆盖。
设:没有被完全覆盖的操作数为 c n t , r e s = k c n t cnt, res = k ^{cnt} cnt,res=kcnt
E. Expand the Path
题意:
有一个 n * n 的网格和一个机器人,机器人在 (1,1)并且只会根据指令移动。
- 指令D:x++
- 指令R:y++
给出一个指令串s(只饱含D 和 R),在机器人移动前可以对指令串进行若干次操作(选择一个指令,进行复制。即 D 变为DD,R 变为 RR),问机器人可以走过的格子数是多少。
分析: