[MtOI2019]迷途之家2019联赛 ABD题解

来源:

https://www.luogu.org/contest/20135

A

大意

给你一个序列,要你分成几组,每组代价为该组异或和,总共代价为每组代价和,求最小总共代价。 n ≤ 1 0 6 n\leq 10^6 n106

题解

结论: x ⊕ y ≤ x + y x\oplus y\leq x+y xyx+y
所以全部分成一组最优。

B

大意

f ( n ) = n a + n b f(n)=n^a+n^b f(n)=na+nb,给定 a , b , n a,b,n a,b,n,求满足 ⌊ f ( n ′ ) ⌋ = ⌊ f ( n ) ⌋ \lfloor f(n')\rfloor=\lfloor f(n)\rfloor f(n)=f(n) n ′ n' n的范围大小。
T ≤ 5 ∗ 1 0 6 , 4 ≤ n ≤ 5 , 5 ≤ a , b ≤ 10 T\leq 5*10^6,4\leq n\leq 5,5\leq a,b\leq 10 T51064n5,5a,b10

题解

二分显然,TLE,65分(100w会T)。
使用牛顿迭代,每次几乎只需要迭代2次,TLE,80分(500w会T)。
只迭代两次都挂了,说明每组数据只能用两次pow函数,在牛顿迭代之后很久想到,拿斜率近似计算其实也是很准确的,因为牛顿迭代几乎只做了一次,所以每组的 a n s = 1 f ′ ( n ) ans=\frac{1}{f'(n)} ans=f(n)1

D

大意

给出数列 a n = 3 a n − 1 + a n − 2 − 3 a n − 3 + 3 n , a 0 = − 3 , a 1 = − 6 , a 2 = − 12 a_n=3a_{n-1}+a_{n-2}-3a_{n-3}+3^n,a_0=-3,a_1=-6,a_2=-12 an=3an1+an23an3+3n,a0=3,a1=6,a2=12,求 a n a_n an T = 5 ∗ 1 0 7 , n ≤ 2 64 − 1 T=5*10^7,n\leq 2^{64}-1 T=5107,n2641

题解

第一眼当然是矩阵快速幂,但是这么大个T怎么可能每次去算。
然后就开始了漫长的错位相减道路,一直算到比赛结束,赛后一分钟过题,我要是考高考数学的时候算错这么多次我大概已经凉了。

下面是过程:
a n − a n − 2 = 3 ∗ ( a n − 1 − a n − 3 ) + 3 n a_n-a_{n-2}=3*(a_{n-1}-a_{n-3})+3^n anan2=3(an1an3)+3n
3 − n ∗ ( a n − a n − 2 ) = 3 − n + 1 ∗ ( a n − 1 − a n − 3 ) + 1 3^{-n}*(a_n-a_{n-2})=3^{-n+1}*(a_{n-1}-a_{n-3})+1 3n(anan2)=3n+1(an1an3)+1
令 数 列 b n = 3 − n ∗ ( a n − a n − 2 ) 令数列b_n=3^{-n}*(a_n-a_{n-2}) bn=3n(anan2)
则 易 得 b n = b n − 1 + 1 , b 2 = − 1 , 可 知 b n = n − 3 则易得b_n=b_{n-1}+1,b_2=-1,可知b_n=n-3 bn=bn1+1,b2=1bn=n3
b n = 3 − n ∗ ( a n − a n − 2 ) = n − 3 b_n=3^{-n}*(a_n-a_{n-2})=n-3 bn=3n(anan2)=n3
a n = 3 n ∗ ( n − 3 ) + a n − 2 a_n=3^n*(n-3)+a_{n-2} an=3n(n3)+an2
到这里可以发现,对下标分奇偶之后可以错位相减(过程就省略了,推错了一万次),然后得到:
a n = 3 n + 2 ( 4 n − 13 ) + 21 + [ n 为 奇 数 ] ∗ 30 32 a_n=\frac{3^{n+2}(4n-13)+21+[n为奇数]*30}{32} an=323n+2(4n13)+21+[n]30
所以一看,复杂度全在 3 n + 2 3^{n+2} 3n+2上,然后就开始所谓的卡常(我觉得这种log级别的优化不叫卡常233)。首先n可以mod ϕ ( p ) \phi(p) ϕ(p),这样就在1e9的级别了,也就是预处理出 [ 0 , 2 16 − 1 ] [0,2^{16}-1] [0,2161]的3的幂次,n一来先把前16位算一下,然后将n右移16位再算,就可以做到O(1)了。感觉并没有卡多少常,这么处理之后就能直接过了,可能是之前开火车遇到的卡常题太多了把,各种bitset,unordered_map,头大。

后记

C并没有做出来,很菜。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值