The 2019 Asia Nanchang First Round Online Programming Contest

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)=p1,那么每个数字都测试一下是不是素数,然后再还原出这100个欧拉函数,再测试即可。
但是通过打表发现,素数并不够密集,不能保证每100个数字就有一个素数,于是想到把数字看作一个大素数和一个小数字的乘积,比如 i = 2 p i=2p i=2p,那么 φ ( i ) = p − 1 φ(i) = p-1 φ(i)=p1,设置多个小数字来测试,可以做到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(1V1000) 个点的无向图,图上有一个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 (1n2×105)数字串,共有 Q   ( 1 ≤ Q ≤ 2 × 1 0 5 ) Q\ (1\le Q\le2\times 10^5) Q (1Q2×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(n1)+2×F(n2)。定义 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(Q107)次查询,每次查询一个 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=Ni1 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)

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值