Timeline
07:40-08:10
通看题目,好好好,3 道构造是吧,A 又双叒叕是性质题,BCD 还没头绪,先把 A 题 O(n) 卡时暴力打了
08:10-08:45
写了 B D 的暴力
08:45-09:25
C 写了一些莫名其妙的代码,开始罚坐
Result
60+50+0+30
Summary
- 有时间多想想前面的题,别在后面死磕拼包。
Problem
T1
给出一个数 a,找出另外两个整数 b,c 使得这三个数为勾股数。
1≤a≤109
Solution
a≥3 时绝对有整数解。
先选个好推的式:a2+b2=c2=a2=c2−b2=(c−b)(c+b)
设 c−b=1,则 c+b=a2,解方程组得:
c=2a2+1=2a2−1+1b=2a2−1
a2−1 为奇数怎么办?此时 a 为偶数,因为对于勾股数来说 (2a)2+(2b)=(2c)2 依旧成立,故将 a 一直除以 2 直到 a 为奇数,特别处理 a=2k 的情况,此时将三数设为 3,4,5,因为此时 a 会除为 1,则 b=0。
时间复杂度 O(loga)。
T2
给出 n 个节点的树,q 次操作:
-
删除第 x 条边。
-
查询 x 所在连通块内的以 x 为起点的最远距离。
n,q≤2×105
Solution
把操作离线下来并倒序处理,把删边转化为逐步加边,最远点一定在直径上,用并查集维护连通块的同时维护直径,且新直径一定在原先两条直径的四个点中。
时间复杂度 O(nlogn+qlogn)。
T3
有 n 个数对 (vali,maski),设 k 为最初的 ∑vali,对于一个数 s 和一个数对来说,若 sANDmaski 的二进制表示下有奇数个 1,则 vali 会变为 −vali,找出这个 s 使得 ∑vali 和 k 正负性互异。
n≤3×105,∣vali∣≤109,maski≤262−1
Solution
将题目中的 “有奇数个 1” 改为 vali×(−1)p,其中 p 为操作次数。
AND 操作只与最高位的 1 之后有关,故枚举 maski 的最高位,所做更改不会影响前面的决策。
对于每一位,若当前位为最高位的所有数对的 ∑vali 和原正负性相同,则说明将此位变为 1 有意义,并将所有影响到的数变为 −vali。
时间复杂度 O(nlogmaxmaski)。
T4
设 f(i) 为 i 的数位和,给定 a,构造 l,r 使得 (∑i=lrf(i))moda=0。
1≤a≤1018
Solution
设 F(l,r) 为 ∑i=lrf(i)。因为 ∀k<1018,F(k+1,k+1+1018)=F(k,k+1018)+1,令 F(1,1018)moda=p,那么 l=1+(a−p),r=1018+(a−p)。
p 就好比 18 个空位中放 10 个物品,那么 p=F(1,1018)=∑i=118C18i×918−i=81×1018。
时间复杂度 O(1)。