7
:
30
−
8
:
30
7:30 - 8:30
7:30−8:30
苟
T
1
T1
T1 。
T
1
T1
T1第一眼看的时候确实有点摸不着头脑 。 但是仔细分析后就会发现这其实是道结论题 。 先说一波结论 : 答案只会是
−
1
-1
−1 ,
1
1
1 或
2
2
2 。 我们来根据二进制按位考虑 ,
2
k
2^k
2k %
3
3
3要么等于
1
1
1 , 要么等于
2
2
2 , 我们先让
1
1
1和
2
2
2内部消化 , 即
3
3
3 个
1
1
1或者
3
3
3 个
2
2
2拼一起 , 然后考虑最后剩下了几个
2
2
2和几个
1
1
1 。 如果两者都还有剩余 , 那么我们就让
1
1
1 和
2
2
2匹配 。 那么最后就只剩下
1
1
1或者只剩下
2
2
2 。 分类考虑一下 :
- 剩下 1 1 1 个 1 1 1 : 判断一下有没有 2 2 2 , 如果有 , 就让这个 1 1 1和 2 2 2拼一起输出去 , 如果没有 , 那么在合法的情况下一定有 > = 3 >=3 >=3 个 1 1 1 , 随便找两个 1 1 1输出 。
- 剩下
2
2
2 个
1
1
1 :判断一下有没有
>
=
3
>=3
>=3个
1
1
1 , 如果有 , 找一个
1
1
1输出 ; 如果没有 , 那么就找两个
2
2
2输出 。
只剩下 2 2 2的情况其实差不多 , 还是分类考虑一下就好了 。
8
:
30
−
10
:
00
8:30 - 10:00
8:30−10:00
看到
T
2
T2
T2本来以为和高位前缀和有关 , 但是并没有看出什么 , 脑不出来 , 弃了 。
10
:
00
−
11
:
00
10:00 - 11:00
10:00−11:00
T
3
T3
T3的
45
p
t
s
D
P
45ptsDP
45ptsDP 还是不难想的吧 , 维护
f
[
i
]
[
x
]
[
y
]
f[i][x][y]
f[i][x][y]表示有
x
x
x个人往左走 ,
y
y
y个人往右走的概率 , 然后考虑转移 , 假如当前的人往右走 , 那么直接假如 , 并不会对原来的状态造成什么影响 。 如果不是 , 考虑他能干掉多少人 , 然后乘上概率转移 。我们可以再脑一下 , 因为转移中有用的状态并不是很多 , 所以可以用
S
T
L
STL
STL中的
q
u
e
u
e
queue
queue来维护这个过程 。 反正能过
60
p
t
s
60pts
60pts的 。