A. Enju With math problem
题意
给出100个整数,它们如果是连续的100个欧拉函数的值,那么输出在欧拉函数的位置,否则输出无解。保证每个整数不大于 1.5 × 1 0 8 1.5\times 10^8 1.5×108。
题解
方法一:
首先想到对于一个素数
p
p
p ,它的欧拉函数
φ
(
p
)
=
p
−
1
φ(p)=p-1
φ(p)=p−1,那么每个数字都测试一下是不是素数,然后再还原出这100个欧拉函数,再测试即可。
但是通过打表发现,素数并不够密集,不能保证每100个数字就有一个素数,于是想到把数字看作一个大素数和一个小数字的乘积,比如
i
=
2
p
i=2p
i=2p,那么
φ
(
i
)
=
p
−
1
φ(i) = p-1
φ(i)=p−1,设置多个小数字来测试,可以做到100的密度。
我们队最后还是TLE,但是lml过了,我们认为是在求欧拉函数的时候我们用的是暴力素数分解,而他们队用了一个
O
(
n
1
4
)
O(n^{\frac 1 4})
O(n41)的方法。
方法二:
对于连续的100个欧拉函数,最大的那个对应的数字一定是一个素数或者是两个素数的乘积,那么直接对最大的那个进行暴力测试即可。
两个算法的复杂度都不稳定,考虑到很多情况下测试都是失败的,所以大部分情况下是跑不满最大复杂度的。
B. Fire-Fighting Hero
题意
给出一个 V ( 1 ≤ V ≤ 1000 ) V(1\le V\le1000) V(1≤V≤1000) 个点的无向图,图上有一个Hero在 S S S 点,有 K K K 个点上有消防队,Hero的速度是消防队的 C C C 倍,比较Hero和消防队到图上最远点的时间,输出快的那一方的最远距离,若时间相同,认为Hero快。
题解
简单的最短路的题,
K
K
K 个消防队为多源,设置超级源点即可解决。
算法复杂度:
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)。
C. Hello 2019
题解
给出一个长度为 n ( 1 ≤ n ≤ 2 × 1 0 5 ) n\ (1\le n\le2\times 10^5) n (1≤n≤2×105)数字串,共有 Q ( 1 ≤ Q ≤ 2 × 1 0 5 ) Q\ (1\le Q\le2\times 10^5) Q (1≤Q≤2×105)次询问,每次询问一个区间 [ l , r ] [l,\ r] [l, r] ,询问区间内的子串是否合法。合法的串要包含一个"9102"作为子序列,但是不能包含子序列"8102"。
题解
见CF 750E,原题,有什么好说的。
E. Magic Master
题意
一个略微变形的约瑟夫问题。
题意
数据范围的 n × m n\times m n×m很小,暴力跑过。
G. Pangu Separates Heaven and Earth
题意
题面是中国古代神话故事,然后输出啥全写在Output里面了,搞笑题。
题解
按题意输出。
H. The Nth Item
题意
给出一个函数
F
(
n
)
=
3
×
F
(
n
−
1
)
+
2
×
F
(
n
−
2
)
F(n) = 3\times F(n-1)+2\times F(n-2)
F(n)=3×F(n−1)+2×F(n−2)。定义
F
(
0
)
=
0
,
F
(
1
)
=
1
F(0) = 0,\ F(1) = 1
F(0)=0, F(1)=1。
共有
Q
(
Q
≤
1
0
7
)
Q(Q\le 10^7 )
Q(Q≤107)次查询,每次查询一个
N
i
N_i
Ni,求出
A
i
=
F
(
N
i
)
A_i = F(N_i)
Ai=F(Ni),只给出第一个查询
N
1
N_1
N1,之后的查询都由之前的结果产生
N
i
=
N
i
−
1
x
o
r
A
i
×
A
i
N_i = N_{i-1}\ xor\ A_i\times A_i
Ni=Ni−1 xor Ai×Ai。
要求出书所有查询结果
A
i
A_i
Ai 的异或和。
题解
普通的矩阵快速幂一次查询是
l
o
g
log
log的,显然不能满足
1
0
7
10^7
107的要求,采用提前打表来加速,我们队是按照10进制下按5位划分。
求出通项公式可以降幂以及避免矩阵操作。
复杂度:由于有矩阵操作,可视为大常数
O
(
n
)
O(n)
O(n)。