AtCoder Beginner Contest 129 题解

AtCoder Beginner Contest 129 题解

AC Codes

A – Airplane

B – Balance

C – Typical Stairs

D – Lamp

给定一个 H×W 的带障碍物的网格图,询问在某个点放一盏灯最多能够照亮几个单元格。灯只能照亮上下左右四个方向,并且光线遇到障碍物后就会停止。

H,W2000

直接开四个矩阵分别存储 (i,j) 这个点向上下左右四个方向最远能走几步。

E – Sum Equals Xor

给定 L 求满足 a+bL 并且 ab=a+b 的自然数 (A,B) 对数。

L2100001

不懂数位 dp,因此直接找规律,不难发现规律是 a[n]=3×a[n2]+(nmod2)×2popcount(n1) ,用记忆化搜索即可解决本题。

F – Takahashi’s Basics in Education and Learning

等差数列 s 满足 si=A+Bi ,将前 Lsi 首尾相连构成大数模 M 的值。比如样例 3,7,11,15,19 就会拼接成 37111519

1A,B,L1018,M109 并且保证 si1018

做法不是很难,但是边界处理很繁琐,代码打了一整天

先观察样例 A=3,B=4,L=5

3×1073+4×1063+4+4×1043+4+4+4×1023+4+4+4+4×100

稍微变形一下:

3×(107+106+104+102+100)4×(106+104+102+100)4×(104+102+100)4×(102+100)4×100

再来个更明显的样例 A=1,B=25,L=6(1,26,51,76,101,126)

1×10121+25×10101+25+25×1081+25+25+25×1061+25+25+25+25×1031+25+25+25+25+25×100

稍微变形一下:

1×(1012+1010+108+106+103+100)25×(1010+108+106+103+100)25×(108+106+103+100)25×(106+103+100)25×(103+100)25×100

可以注意到一个重要事实:10d 可以看作一个分段的等差数列,而且根据数据范围公差最大不超过 18 。然后,以上方的样例 A=1,B=25,L=6 为例,首先出现了一个等差三角形:

106+103+100103+100100

公差发生变化后,又出现了一个新的等差三角形:

1012+1010+1081010+108108

对于某个等差三角形(假设有 k 层)

100100+10q100+10q+102q100+10q++10(k1)q

我们需要求解的是这个三角形最后一行的和,以及这个三角形整体的和。最后一行的求和显然就是等差数列求和,而整个三角形的求和则可以写成:

k1i=0(ki)×10iq

这种等差 x 等比的合成数列求和有一个经典方法:错位相减(相信高中数学里一定学过)。

k×100(k1)×10q(k2)×102q10kqSk×10q(k1)×102q2×10kq10(k+1)q10qS

上下相减后得到:

10qSS=10q+102q++10kq+10(k+1)qkS=10(1qk)1qk10q1

但是!本题中的模数可能为合数,因此直接这么做是不行的(逆元不存在)。观察到这个三角形的递推性质,不妨令数列 ai=100+10q++10(i1)q ,于是有以下递推关系 ai+1=10qai+1 , 差分一下得到:

ai+2ai+1=10qai+110qaiai+2=(10q+1)ai+110qai

注意到这是一个常系数齐次线性递推数列,因此可以求出该数列的生成函数 f ,答案就是 [xk1]f1x

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇