A. Math loser
首先如果一个
L(x)
L
(
x
)
和
R(x)
R
(
x
)
相同,那么必然不满足条件,所以我们可以排除
x−−√
x
为素数的情况。
那么我们只需要筛出所有的素数,那么一个数的
L(x)
L
(
x
)
和
R(x)
R
(
x
)
必然是相邻的素数,那么我们就枚举
L
L
和,来按区间来统计答案惹。
现在考虑一个简单容斥,假如我们要计算的是只能
L
L
或整除的数的个数,那么我们需要计算出能被
L
L
整除的数的个数,能被整除的数的个数,然后减去
2
2
倍的同时能被和
R
R
整除的数个数即可。
既然能求出个数,那么按等差数列扩展一下就是求和了。
B. Another query on a graph
这个题目是我根据浙大月赛一题瞎想了一下得到的。
先考虑用并查集来维护区间连通性,因为是区间是动态变化的的,因此可以用莫队来转移。所以这题的解法是带撤销莫队 + 带撤销并查集。
先把同一块的左端点放在一起,左端点在同一块的按右端点从小到大排序。
如果左右端点在同一块,直接暴力计算答案。
如果不在一块,对右端点而言只有插入,对左端点而言,每次暴力加入之后再撤销。
贡献用并查集来计算,顺便一提带撤销并查集需要按秩合并。
因此总复杂度是
C. A man who has iron bone
签到题,“我就是退学,倒贴钱,也要坚持打ACM”“嘿嘿。退坑真爽”。
D. Delete substring
这个是我当时看错牛客一个题目的题意得来的
首先删的多肯定可以满足要求,单调性比较显然,因此可以二分。
枚举删掉的子串,可以用前缀和和后缀和快速得到新串的变化次数。
因此二分 + 前缀和后缀和就可以了。
E. Foolish meopass
经典题目,线段树每个节点维护13个标记,代表这个区间模13余的数是0到12的个数分别是多少。
每次区间赋值就相当于把这13个标记的位置循环右移,开个标记记录下次数,在询问的时候暴力更新即可。
F. Meow Meow Path
签到题,面试碰着的,随便模拟下就好了。
G. Huge and integer
可以证明和
a
a
无关,答案就是…
考虑小于
b
b
的且与互质的一个数
x
x
,那么和
1
1
,,
…
…
,
b−1
b
−
1
的乘积 模
b
b
的结果必然还是,
2
2
,,
b−1
b
−
1
。
若
x
x
和不互质,那么
x
x
和,
2
2
,,
b−1
b
−
1
的乘积 模
b
b
的结果必然也与不互质,而
a
a
与互质,这说明此时对答案不成贡献。
所以答案就是
phi(b)
p
h
i
(
b
)
。
H. Sports queue
奇偶分开维护,建立两棵
Splay
S
p
l
a
y
树,分别维护奇数位置的数列和偶数位置的数列。则:
对操作
0
0
,可将两棵树上的对应区间的子树直接交换即可;
对操作,将两棵树上对应的区间分别翻转;
对操作
2
2
,两棵树分别求和相加即可。
各个操作时间复杂度均为
I. Star War
对答案进行二分,用单调队列维护区间最大值最小值,直接搞即可。
整体时间复杂度
O(nlogn)
O
(
n
l
o
g
n
)
J. Cal Substring
考虑
dp[i]
d
p
[
i
]
代表当前匹配到第
i
i
个位置的答案是多少,那么考虑转移,如果为回文串,那么就存在
dp[i]=∑dp[j−1]∗(i−j+1)
d
p
[
i
]
=
∑
d
p
[
j
−
1
]
∗
(
i
−
j
+
1
)
。