AtCoder Beginner Contest 192 题解

ABC192 题解

[toc]

AC 代码

A – Star

B – uNrEaDaBlE sTrInG

C – Kaprekar Number

定义了 Kaprekar Number 的运算,给出首项,求第 N 个 Kaprekar Number 。

N105

模拟一下,如果遇到循环节直接退出即可。

D – Base n

给定两个十进制正整数 X,M ,询问 XK 进制下小于等于 M 的合法情况有几种?这里的合法情况指 XK 进制下的不同数值数量

例如 X=22,M=10X 在三进制下 =8<10X 在四进制之下 =1010 ;因此一共 2 个合法的 X

X1060,M1018

显然进制越高,那么 X 就越大,于是我们可以二分查找合法区间。注意特判 X 为个位数的情况(不论几进制都是他本身,最多只有一种合法情况)。

E – Train

给定一个 N 个点,M 条边的无向图,每一条边 i 上都运作有一班列车,该班次的列车会在 Ki 倍数的时间从某一个端点发车(双向发车),并且运行 Ti 的时间到达另一个端点。询问从点 X 出发到达点 Y 的最少时间?

N,M105Ti,Ki109

是一个显然的最短路问题,唯一不同之处在于边权的计算:

运行 dijkstra 算法时,每到达一个点 u 时假设最短时长为 Tu ,那么从该点到达点 v 的最短时长则为 TuKu,v×Ku,v+Tu,v

F – Potion

N 个魔力瓶,每个瓶子有 Ai 点魔力,你可以从中选择 K 个瓶子并获得这些瓶子的魔力之和,然后你的魔力每秒会增加 K ,询问你的魔力到达 X (必须严格到达 X ,不能超过)需要的最少时间。

N100,Ai107,109X1018

因为魔力每秒增加 K ,这说明我们如果选了 K 个瓶子,那么 X - 这K个瓶子的魔力和 必定是 K 的倍数中最大的那个,这提示我们可以通过枚举 K 进行 dp。

枚举我们最终选了 K(K=[1..N] 个瓶子,假设 dp[i][j][k] 表示前 i 个瓶子中选 j 个,然后对 K 取模后与 k 同余的最大值(因为我们最终取了 K 个瓶子,因此只需要考虑关于 K 的剩余系)。

转移很简单:

{dp[i+1][j+1][(k+a[i])modK]=max(dp[i+1][j+1][(k+a[i])modK],dp[i][j][k]+a[i])dp[i+1][j][k]=max(dp[i+1][j][k],dp[i][j][k])

算上枚举 KO(N) ,复杂度合计为 O(N4)

暂无评论

发送评论 编辑评论


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