T1:数据结构(set)
对一个可重集合进行操作,每次可以所有元素
+
1
+1
+1或添加一个元素。输出集合元素的
k
k
k次方和。
根据二项式定理
可以发现,
(
a
+
1
)
k
−
a
k
=
C
(
k
,
1
)
a
n
−
1
+
C
(
k
,
2
)
a
k
−
2
.
.
.
C
(
k
,
k
−
1
)
a
(a+1)^k-a^k=C(k,1)a^n-1+C(k,2)a^{k-2}...C(k,k-1)a
(a+1)k−ak=C(k,1)an−1+C(k,2)ak−2...C(k,k−1)a
那么就只要预处理出所有的
∑
a
[
i
]
k
\sum{a[i]}^{k}
∑a[i]k然后大力计算即可
时间效率
O
(
n
k
2
)
O(nk^2)
O(nk2)
注意卡常
T2:博弈(game)
游戏在一个长为 n 的整数序列 a 上进行,A 和 B 轮流操作,由 A 先手。每次操作是指选择序列最左 / 最右边的元素,并删掉它
游戏一直进行,直到剩下一个元素 x,我们定义这次游戏的输出为 x 。A 想让输出尽可能大,B 想让它尽可能小。
但是,就在他们开始玩游戏之前,B 突然接到了一个女朋友的电话,此时 A 就有时间对序列动手脚了。具体来说,A 可以在游戏开始之前先执行恰好 次操作,得到一个对自己更有利的局面(当然,游戏开始之后仍然是 A 先手)。
现在,问 A 和 B 都按照最优策略玩游戏,游戏的输出值会是多少。
特别地,如果输入的 k=-1,这表示你需要对 k=0~n-1 都计算答案。
类似于之前的"当那一天来临(come)"
设
m
i
d
=
(
l
+
r
)
/
2
mid=(l+r)/2
mid=(l+r)/2 通过手玩可以发现,当
r
−
l
+
1
r-l+1
r−l+1为奇数时,
a
n
s
=
m
a
x
(
m
i
n
(
s
[
m
i
d
−
1
]
,
s
[
m
i
d
]
)
,
m
i
n
(
s
[
m
i
d
]
,
s
[
m
i
d
+
1
]
)
)
ans=max(min(s[mid-1],s[mid]),min(s[mid],s[mid+1]))
ans=max(min(s[mid−1],s[mid]),min(s[mid],s[mid+1]))
当
r
−
l
+
1
r-l+1
r−l+1为偶数时,
a
n
s
=
m
a
x
(
s
[
m
i
d
]
,
s
[
m
i
d
+
1
]
)
ans=max(s[mid],s[mid+1])
ans=max(s[mid],s[mid+1])
对于任意的k>2,,只要头尾都进行操作,那么一定可以从k-2转移过来,如果只有头或尾操作了,判断一下取最大值即可
T3: 植物大战僵尸(pvz)
至今不会