20210903下午

20210903下午

难度上来了,好耶
请添加图片描述

T1T2T3T4T5T6T7T8
预测1001001001001001000100
一测100100010001000100

T1:
先找因数和,再找因数和的因数和,判断是否相等与越界。

T2:
模拟,注意别在这轮把下轮出局的数删了。

T3:
和前几天一样构造二叉树,边造边统计即可,数组开小了寄了,但数据范围在哪呢?怎么回事呢?

T4:
如题目下提示所示,bfs即可。

T5:
矩阵转移即可,设 f i f_i fi为数列第 i i i项, S i S_i Si为前 i i i项和。
[ S i f i f i − 1 ] = [ S i − 1 + f i f i f i − 1 ] = [ 1 × S i − 1 + 1 × f i − 1 + 1 × f i − 2 0 × S i − 1 + 1 × f i − 1 + 1 × f i − 2 0 × S i − 1 + 1 × f i − 1 + 0 × f i − 2 ] = [ S i − 1 f i − 1 f i − 2 ] × [ 1 1 1 0 1 1 0 1 1 ] = ⋯ = [ S 1 f 1 f 0 ] × [ 1 1 1 0 1 1 0 1 1 ] n − 1 = [ 1 1 0 ] × [ 1 1 1 0 1 1 0 1 1 ] n − 1 \begin{bmatrix} S_i \\ f_i \\ f_{i-1} \end{bmatrix}=\begin{bmatrix} S_{i-1}+f_i \\ f_i\\ f_{i-1} \end{bmatrix}=\begin{bmatrix} 1\times S_{i-1}+1\times f_{i-1}+1\times f_{i-2}\\ 0\times S_{i-1}+1\times f_{i-1}+1\times f_{i-2}\\ 0\times S_{i-1}+1\times f_{i-1}+0\times f_{i-2} \end{bmatrix}=\begin{bmatrix} S_{i-1}\\ f_{i-1}\\ f_{i-2}\\ \end{bmatrix} \times \begin{bmatrix} 1&1&1\\ 0&1&1\\ 0&1&1 \end{bmatrix}=\cdots=\begin{bmatrix} S_1\\ f_1\\ f_0 \end{bmatrix} \times \begin{bmatrix} 1&1&1\\ 0&1&1\\ 0&1&1 \end{bmatrix}^{n-1}=\\ \begin{bmatrix} 1\\ 1\\ 0 \end{bmatrix}\times \begin{bmatrix} 1&1&1\\ 0&1&1\\ 0&1&1 \end{bmatrix}^{n-1} Sififi1=Si1+fififi1=1×Si1+1×fi1+1×fi20×Si1+1×fi1+1×fi20×Si1+1×fi1+0×fi2=Si1fi1fi2×100111111==S1f1f0×100111111n1=110×100111111n1
矩阵快速幂即可。考试自信不开long long,他真的。。。怎么这么猪比啊,我真的哭死。
T6:
很有难度的几何。
首先确定思路用总的方案数减共线的方案数。可以考虑出总的减横着竖着的情况为 C n m 3 − C n 3 × m − C m 3 × n C_{nm}^3-C_n^3 \times m-C_m^3 \times n Cnm3Cn3×mCm3×n,接下来就是考虑斜线的情况。
请添加图片描述
考虑枚举 ( 1 , 1 ) (1,1) (1,1) ( n + 1 , m + 1 ) (n+1,m+1) (n+1,m+1)之间的每一个点,它与原点 ( 0 , 0 ) (0,0) (0,0)便确定了两个点,那在这条线段上的每一点都与这两个点构成三点共线(确定在线段上就可以确定不重不漏),那么这条线段上除两端点有多少个端点呢,答案是 ( i , j ) (i,j) (i,j) ( 0 , 0 ) (0,0) (0,0)之间有 g c d ( i , j ) − 1 gcd(i,j)-1 gcd(i,j)1个点,也很好证明。易得这条线段从下往上除 ( 0 , 0 ) (0,0) (0,0)外第一个点为 ( i / g c d ( i , j ) , j / g c d ( i , j ) ) (i/gcd(i,j),j/gcd(i,j)) (i/gcd(i,j),j/gcd(i,j))(即坐标互质的那个点),且从0开始横向每 i / g c d ( i , j ) i/gcd(i,j) i/gcd(i,j)就有一个点,所以点数即为 i i / g c d ( i , j ) = g c d ( i , j ) \frac{i}{i/gcd(i,j)}=gcd(i,j) i/gcd(i,j)i=gcd(i,j),去掉 ( i , j ) (i,j) (i,j)就是 g c d ( i , j ) − 1 gcd(i,j)-1 gcd(i,j)1个点。(上图可验证, g c d ( 2 , 4 ) = 2 gcd(2,4)=2 gcd(2,4)=2 ( 0 , 0 ) − ( 2 , 4 ) (0,0)-(2,4) (0,0)(2,4)上也正好有 2 − 1 = 1 2-1=1 21=1个点)所以每条线段的贡献即为 g c d ( i , j ) − 1 gcd(i,j)-1 gcd(i,j)1
请添加图片描述
然后发现线段可以在图内平移,因为横纵坐标为 ( n + 1 , m + 1 ) (n+1,m+1) (n+1,m+1),所以可以纵向平移 n + 1 − i n+1-i n+1i位,横向平移 m + 1 − j m+1-j m+1j位,总共 ( n + 1 − i ) ( m + 1 − j ) (n+1-i)(m+1-j) (n+1i)(m+1j)条线段,总贡献就是 ( n + 1 − i ) ( m + 1 − j ) ( g c d ( i , j ) − 1 ) (n+1-i)(m+1-j)(gcd(i,j)-1) (n+1i)(m+1j)(gcd(i,j)1),注意这样是考虑左下角的情况,右下角的情况是相同的,所以总的情况数为
∑ i = 1 n ∑ j = 1 m ( n + 1 − i ) ( m + 1 − j ) ( g c d ( i , j ) − 1 ) \sum_{i=1}^{n}\sum_{j=1}^{m}(n+1-i)(m+1-j)(gcd(i,j)-1) i=1nj=1m(n+1i)(m+1j)(gcd(i,j)1)
总复杂度为 O ( n 2 ) O(n^2) O(n2)

优化
前置知识:
[ ⋯   ] [\cdots] []表示当 [ ] [] []内语句判定为真时为1,否则为0。
欧拉函数 ϕ ( n ) \phi(n) ϕ(n):1-n中与n互质的函数,即
ϕ ( n ) = ∑ i = 1 n [ g c d ( i , n ) = = 1 ] \phi(n)=\sum_{i=1}^n[gcd(i,n)==1] ϕ(n)=i=1n[gcd(i,n)==1]
ϕ ( n ) \phi(n) ϕ(n)可用欧拉筛在 O ( n ) O(n) O(n)时间内求出 1 − n 1-n 1n的函数值,这个可以去自行了解,在此不多加证明。
ϕ ( n ) \phi(n) ϕ(n)具有性质 n = ∑ d ∣ n ϕ ( d ) n=\sum_{d|n}\phi(d) n=dnϕ(d),可用莫比乌斯反演证明,而另一种证明如下:
定义 f ( x ) f(x) f(x)代表 1 − n 1-n 1n中与 n n n最大公约数为x的数的个数。即 f ( x ) = ∑ i = 1 n [ g c d ( n , i ) = = x ] f(x)=\sum_{i=1}^n[gcd(n,i)==x] f(x)=i=1n[gcd(n,i)==x],则显然有 n = ∑ d ∣ n f ( d ) n=\sum_{d|n}f(d) n=dnf(d),即枚举n的每个约数, 1 − n 1-n 1n中每个数与n的最大公约数一定是n的一个约数。
因为若 g c d ( i , j ) = x gcd(i,j)=x gcd(i,j)=x,则 g c d ( i x , j x ) = 1 gcd(\frac{i}{x},\frac{j}{x})=1 gcd(xi,xj)=1,所以
f ( x ) = ∑ i = 1 n [ g c d ( n , i ) = = x ] = ∑ i = 1 n x [ g c d ( n x , i ) = = 1 ] = ϕ ( n x ) f(x)=\sum_{i=1}^n[gcd(n,i)==x]=\sum_{i=1}^{\frac{n}{x}}[gcd(\frac{n}{x},i)==1]=\phi(\frac{n}{x}) f(x)=i=1n[gcd(n,i)==x]=i=1xn[gcd(xn,i)==1]=ϕ(xn)
所以得 n = ∑ d ∣ n f ( d ) = ∑ d ∣ n ϕ ( n d ) n=\sum_{d|n}f(d)=\sum_{d|n}\phi(\frac{n}{d}) n=dnf(d)=dnϕ(dn),当枚举每个 d ∣ n d|n dn n d \frac{n}{d} dn等价于 d d d,所以 n = ∑ d ∣ n ϕ ( d ) n=\sum_{d|n}\phi(d) n=dnϕ(d)得证。

好吧,其实你看不懂上面的证明也是没关系的,你只需要记住结论 n = ∑ d ∣ n ϕ ( d ) n=\sum_{d|n}\phi(d) n=dnϕ(d)就行。
大家可能都知道当看到 [ g c d ( i , j ) = = 1 ] [gcd(i,j)==1] [gcd(i,j)==1]的时候我们会用莫比乌斯函数 μ ( n ) \mu(n) μ(n)来反演,事实上当遇到求 g c d ( i , j ) gcd(i,j) gcd(i,j)时也有一种常见转换思路即利用上述公式将 n n n代换为 g c d ( i , j ) gcd(i,j) gcd(i,j),即 g c d ( i , j ) = ∑ d ∣ g c d ( i , j ) ϕ ( d ) gcd(i,j)=\sum_{d|gcd(i,j)}\phi(d) gcd(i,j)=dgcd(i,j)ϕ(d)
我们再来看看原式变为
∑ i = 1 n ∑ j = 1 m ( n + 1 − i ) ( m + 1 − j ) ( ∑ d ∣ g c d ( i , j ) ϕ ( d ) − 1 ) \sum_{i=1}^{n}\sum_{j=1}^{m}(n+1-i)(m+1-j)(\sum_{d|gcd(i,j)}\phi(d)-1) i=1nj=1m(n+1i)(m+1j)(dgcd(i,j)ϕ(d)1)
因为 ϕ ( 1 ) = 1 \phi(1)=1 ϕ(1)=1,所以我们可以把这一项提出来消去后面的 1 1 1,变为
∑ i = 1 n ∑ j = 1 m ( n + 1 − i ) ( m + 1 − j ) ∑ d ∣ g c d ( i , j ) d ≠ 1 ϕ ( d ) \sum_{i=1}^{n}\sum_{j=1}^{m}(n+1-i)(m+1-j)\sum_{d|gcd(i,j)}^{d\ne1}\phi(d) i=1nj=1m(n+1i)(m+1j)dgcd(i,j)d=1ϕ(d)
再来看这个枚举的d,我们是在枚举 i , j i,j i,j最大公约数的约数,那就是枚举 i , j i,j i,j的所有公约数,那就可以换一个思路,一个数 d d d作为公约数被计算到,只需要将其分别扩大 i i i倍和 j j j倍,即枚举所有的 d d d,再将其扩大 i i i倍与 j j j倍,将d作为其公约数进行计算,所以对式子进行变形
∑ d = 2 min ⁡ ( n , m ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ ( n + 1 − i d ) ( m + 1 − j d ) ϕ ( d ) \sum_{d=2}^{\min(n,m)}\sum_{i=1}^{\lfloor{\frac{n}{d}}\rfloor}\sum_{j=1}^{\lfloor{\frac{m}{d}}\rfloor}(n+1-id)(m+1-jd)\phi(d) d=2min(n,m)i=1dnj=1dm(n+1id)(m+1jd)ϕ(d)
将互不干扰的部分拆开,得到
∑ d = 2 min ⁡ ( n , m ) ϕ ( d ) ∑ i = 1 ⌊ n d ⌋ ( n + 1 − i d ) ∑ j = 1 ⌊ m d ⌋ ( m + 1 − j d ) \sum_{d=2}^{\min(n,m)}\phi(d)\sum_{i=1}^{\lfloor{\frac{n}{d}}\rfloor}(n+1-id)\sum_{j=1}^{\lfloor{\frac{m}{d}}\rfloor}(m+1-jd) d=2min(n,m)ϕ(d)i=1dn(n+1id)j=1dm(m+1jd)
现在前一项可以 O ( n ) O(n) O(n)预处理得到,那么就对后两项进行处理,发现后两项显然是等差数列形式,以 n n n项为例,对其求和。
首项: n − d + 1 n-d+1 nd+1
末项: n + 1 − ⌊ n d ⌋ × d = n   m o d   d + 1 n+1-\lfloor{\frac{n}{d}}\rfloor\times d=n \bmod d+1 n+1dn×d=nmodd+1
项数: ⌊ n d ⌋ \lfloor{\frac{n}{d}}\rfloor dn
∑ i = 1 ⌊ n d ⌋ ( n + 1 − i d ) = ( n − d + 1 + n   m o d   d + 1 ) × ⌊ n d ⌋ 2 \sum_{i=1}^{\lfloor{\frac{n}{d}}\rfloor}(n+1-id)=\frac{(n-d+1+n\bmod d+1)\times{\lfloor{\frac{n}{d}}\rfloor}}{2} i=1dn(n+1id)=2(nd+1+nmodd+1)×dn
对m同理,式子最终化为
∑ d ∣ n min ⁡ ( n , m ) ϕ ( d ) ( n − d + n   m o d   d + 2 ) ( m − d + m   m o d   d + 2 ) 4 \frac{\sum_{d|n}^{\min(n,m)}\phi(d)(n-d+n\bmod d+2)(m-d+m\bmod d+2)}{4} 4dnmin(n,m)ϕ(d)(nd+nmodd+2)(md+mmodd+2)
成功优化至 O ( n ) 。 O(n)。 O(n)
请添加图片描述
T7:
贪心,考试的时候没写(去推上面那个题了),考完发现我三年前的代码竟然在没spj的aoj上过了,震惊。请添加图片描述
对连续两项 ( a 1 , b 1 ) , ( a 2 , b 2 ) (a_1,b_1),(a_2,b_2) (a1,b1)(a2,b2)分析,前项在前的时间为 a 1 + b 2 + max ⁡ ( a 2 , b 1 ) a_1+b_2+\max(a_2,b_1) a1+b2+max(a2,b1),后项在前时间为 a 2 + b 1 + max ⁡ ( a 1 , b 2 ) a_2+b_1+\max(a_1,b_2) a2+b1+max(a1,b2),若前项在前更优,则有 a 1 + b 2 + max ⁡ ( a 2 , b 1 ) < a 2 + b 2 + max ⁡ ( a 1 , b 2 ) a_1+b_2+\max(a_2,b_1)<a_2+b_2+\max(a_1,b_2) a1+b2+max(a2,b1)<a2+b2+max(a1,b2),移项得 a 1 + b 2 − max ⁡ ( a 1 , b 2 ) < a 2 + b 1 − max ⁡ ( a 2 , b 1 ) a_1+b_2-\max(a_1,b_2)<a_2+b_1-\max(a_2,b_1) a1+b2max(a1,b2)<a2+b1max(a2,b1),发现最大项被减掉了,所以得到 min ⁡ ( a 1 , b 2 ) < min ⁡ ( a 2 , b 1 ) \min(a_1,b_2)<\min(a_2,b_1) min(a1,b2)<min(a2,b1)。我们以这个来排序就做完了。。。。。。
但据dl所说,这个式子不满足不等比性的传递性,所以不能直接用这个式子排序。(详见浅谈邻项交换排序的应用以及需要注意的问题
所以我们对这个式子进一步分析,发现这个式子可以根据 a , b a,b a,b大小进行分类:
1. a 1 < b 1 a_1<b_1 a1<b1 a 2 < b 2 a_2<b_2 a2<b2时,根据 a 1 < a 2 a_1<a_2 a1<a2排序。
2. a 1 = b 1 a_1=b_1 a1=b1 a 2 = b 2 a_2=b_2 a2=b2时,可随意排序。
3. a 1 > b 1 a_1>b_1 a1>b1 a 2 > b 2 a_2>b_2 a2>b2时,根据 b 1 > b 2 b_1>b_2 b1>b2排序。
因为优先找 a a a b b b小的,所以设计判定函数 d i d_i di
d i = { − 1 a i < b i 0 a i = b i 1 a i > b i d_i= \begin{cases} -1 & a_i<b_i \\ 0 & a_i=b_i \\ 1 & a_i>b_i \end{cases} di=101ai<biai=biai>bi
d i d_i di为第一关键字,相等再按上述 a , b a,b a,b条件排序,模拟计算出时间即可。
T8:
数学题,据说有用三分的,tqlorz。
设人距离左边墙长度为 d d d,影长为 l l l
分类,首先是影子全在地上的情况,即 d × H H − h < = D d\times\frac{H}{H-h}<=D d×HhH<=D时,根据相似得 l = d × H H − h − d = d × h H − h l=d\times \frac{H}{H-h}-d=d\times\frac{h}{H-h} l=d×HhHd=d×Hhh,随 d d d单调上升,所以当影子抵到右墙底时,即 d = D × H − h H d=D\times \frac{H-h}{H} d=D×HHh时,影长最长 l max ⁡ = D × h H l_{\max}=D\times \frac{h}{H} lmax=D×Hh
请添加图片描述

然后是影子挂墙上的情况,即 d × H H − h > D d\times\frac{H}{H-h}>D d×HhH>D d < = D d<=D d<=D时,延长出去,根据相似可得 d ′ = d × H H − h d'=d\times \frac{H}{H-h} d=d×HhH,再根据相似得 L h = d ′ − D d ′ − d \frac{L}{h}=\frac{d'-D}{d'-d} hL=dddD,化简得 L = H − D ( H − h ) d L=H-\frac{D(H-h)}{d} L=HdD(Hh),加上地上的影子得 l = D + H − D ( H − h ) d − d l=D+H-\frac{D(H-h)}{d}-d l=D+HdD(Hh)d,欲求 l max ⁡ l_{\max} lmax,则使后两项最小,显然后两项为对钩函数,取最低点得当 d = D ( H − h ) d=\sqrt{D(H-h)} d=D(Hh) 时, l max ⁡ = D + H − 2 D ( H − h ) l_{\max}=D+H-2\sqrt{D(H-h)} lmax=D+H2D(Hh) ,这个值显然是比第一种情况的值大的,代入计算就做出这道题啦。

然后你去算就会发现3个样例两个过不了。
请添加图片描述
然而你的d是有范围的。超范围就要分类讨论。
D ( H − h ) > D ⇒ H − h > D \sqrt{D(H-h)}>D\Rightarrow H-h>D D(Hh) >DHh>D时,也就是人站墙里面了,那这时 d d d应该取 D D D,此时 l max ⁡ = h l_{\max}=h lmax=h
d ′ < D ⇒ D ( H − h ) > H d'<D\Rightarrow \sqrt{D(H-h)}>H d<DD(Hh) >H时,也就是影子到墙根里去了,那这时应该取情况1的答案,即 l max ⁡ = D × h H l_{\max}=D\times \frac{h}{H} lmax=D×Hh
答案完备
l max ⁡ = { h H − h > D D × h H D ( H − h ) > H D + H − 2 D ( H − h ) else l_{\max}= \begin{cases} h &H-h>D \\ D\times \frac{h}{H} & \sqrt{D(H-h)}>H \\ D+H-2\sqrt{D(H-h)} & \text{else} \end{cases} lmax=hD×HhD+H2D(Hh) Hh>DD(Hh) >Helse

总结:难度上升了,摩多摩多。
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值