Timeline

07:40-08:10

通看题目,好好好,3 道构造是吧,A 又双叒叕是性质题,BCD 还没头绪,先把 A 题 O(n)\mathcal{O}(n) 卡时暴力打了

08:10-08:45

写了 B D 的暴力

08:45-09:25

C 写了一些莫名其妙的代码,开始罚坐

Result

60+50+0+3060+50+0+30

Summary

  1. 有时间多想想前面的题,别在后面死磕拼包。

Problem

T1

给出一个数 aa,找出另外两个整数 b,cb,c 使得这三个数为勾股数。

1a1091\leq a\leq 10^9

Solution

a3a\geq 3 时绝对有整数解。

先选个好推的式:a2+b2=c2=a2=c2b2=(cb)(c+b)a^2+b^2=c^2=a^2=c^2-b^2=(c-b)(c+b)

cb=1c-b=1,则 c+b=a2c+b=a^2,解方程组得:

c=a2+12=a212+1b=a212c=\frac{a^2+1}{2}=\frac{a^2-1}{2}+1\\ b=\frac{a^2-1}{2}

a21a^2-1 为奇数怎么办?此时 aa 为偶数,因为对于勾股数来说 (a2)2+(b2)=(c2)2(\frac{a}{2})^2+(\frac{b}{2})=(\frac{c}{2})^2 依旧成立,故将 aa 一直除以 22 直到 aa 为奇数,特别处理 a=2ka=2^k 的情况,此时将三数设为 3,4,53,4,5,因为此时 aa 会除为 11,则 b=0b=0

时间复杂度 O(loga)\mathcal{O}(\log a)

T2

给出 nn 个节点的树,qq 次操作:

  1. 删除第 xx 条边。

  2. 查询 xx 所在连通块内的以 xx 为起点的最远距离。

n,q2×105n,q\leq 2\times 10^5

Solution

把操作离线下来并倒序处理,把删边转化为逐步加边,最远点一定在直径上,用并查集维护连通块的同时维护直径,且新直径一定在原先两条直径的四个点中。

时间复杂度 O(nlogn+qlogn)\mathcal{O}(n\log n+q\log n)

T3

nn 个数对 (vali,maski)(val_i,mask_i),设 kk 为最初的 vali\sum val_i,对于一个数 ss 和一个数对来说,若 sANDmaskis\operatorname{AND} mask_i 的二进制表示下有奇数个 11,则 valival_i 会变为 vali-val_i,找出这个 ss 使得 vali\sum val_ikk 正负性互异。

n3×105,vali109,maski2621n\leq 3\times 10^5,|val_i|\leq 10^9,mask_i\leq 2^{62}-1

Solution

将题目中的 “有奇数个 11” 改为 vali×(1)pval_i\times (-1)^p,其中 pp 为操作次数。

AND\operatorname{AND} 操作只与最高位的 11 之后有关,故枚举 maskimask_i 的最高位,所做更改不会影响前面的决策。

对于每一位,若当前位为最高位的所有数对的 vali\sum val_i 和原正负性相同,则说明将此位变为 11 有意义,并将所有影响到的数变为 vali-val_i

时间复杂度 O(nlogmaxmaski)\mathcal{O}(n\log \max mask_i)

T4

f(i)f(i)ii 的数位和,给定 aa,构造 l,rl,r 使得 (i=lrf(i))moda=0(\sum_{i=l}^{r}f(i))\bmod a=0

1a10181\leq a\leq 10^{18}

Solution

F(l,r)F(l,r)i=lrf(i)\sum_{i=l}^{r}f(i)。因为 k<1018,F(k+1,k+1+1018)=F(k,k+1018)+1\forall k < 10^{18},F(k+1,k+1+10^{18})=F(k,k+10^{18})+1,令 F(1,1018)moda=pF(1,10^{18})\bmod a=p,那么 l=1+(ap),r=1018+(ap)l=1+(a-p),r=10^{18}+(a-p)

pp 就好比 1818 个空位中放 1010 个物品,那么 p=F(1,1018)=i=118C18i×918i=81×1018p=F(1,10^{18})=\sum_{i=1}^{18}C_{18}^{i}\times 9^{18-i}=81\times 10^{18}

时间复杂度 O(1)\mathcal{O}(1)