AtCoder Beginner Contest 192 完整题意+题解

题解

A

给你一个数 (X)(1le Xle 10^5)),求最小的 (Y>X) 使得 (Y)(100) 的倍数。

直接判定即可。

B

给一个字符串,判断是否满足奇数位上是小写字母,偶数位上是大写字母。

也可以直接判定。

C

称一次操作为将一个数赋值为这个数的各个数字按照从大到小的排列顺序得到的数,减去从小到大排序得到的数。

给定 (N)(1le Nle 10^9)),求 (K)(1le Kle 10^5))次操作后的数。

直接暴力模拟 (O(Klog^2 N)) 即可。

https://atcoder.jp/contests/abc192/submissions/20296501

D

给定整数 (X)(1le Xle 10^{60}))和 (M)(1le Mle 10^{18})),设 (d)(X) 最大的一位数。

求对于所有的 (a>d,ainmathbb{Z})(a) 进制数 (X) 所代表的数的个数,同时 ((X)_ale M)

首先,对于所有 (len(X)>1) 的情况,(a) 的个数与题意中所求一一对应。而 (len(x)=1) 只需特判。

注意到这样的 (a) 一定在一个连续区间内,左端点固定,则可以二分右端点求得数量。

同时,long long 相乘可能会爆,要用 __int128(AtCoder 支持) 或龟速乘判。

https://atcoder.jp/contests/abc192/submissions/20318733

E

(N)(1le Nle 10^5))个点,(M)(1le Mle 10^5))条无向边。设初始时刻为 (0),则进入某条边的时刻必须为 (xK_i)(xinmathbb{N}),可以在节点停留),消耗时间为 (T_i)(1le K_i,T_ile 10^9))。求 (X)(Y) 的最短路,不连通则输出 -1

注意到时间仍然是越短越好,满足 dijkstra 的基本条件,直接跑,改一下松弛条件即可。

https://atcoder.jp/contests/abc192/submissions/20326035

F

(N)(1le Nle 100))个数 (A_i)(1le A_ile 10^7)),要求选出若干个数(假设 (x) 个,分别为 (A_{a_1},A_{a_2},cdots,A_{a_x})),要求 (sum A_{a_i}equiv Xpmod{x})(10^9le Xle 10^{18}))且 (dfrac{X-sum A_{a_i}}{x}) 最小,求出最小值。

枚举所有可能的 (x),分别进行 DP。

(f_{i,j,k}) 为前 (i) 个数选了 (j) 个,(mod{x}) 的余数为 (k)(sum A_{a_i}) 最大值,则:

[f_{i,j,k}=max{f_{i-1,j,k},f_{i-1,j-1,(k-a_i)mod{x}}+a_i} ]

总复杂度 (mathcal{O}(n^4))

https://atcoder.jp/contests/abc192/submissions/20345725

评价

可以说是一场比较中规中矩的 abc 了。总体难度不是特别大。

D 是卡得最久的一题,各种边界讨论比较繁琐,但也不是很麻烦。F 是赛时唯一没有 A 的题,赛后发现是初始值和特判的问题。


非常感谢您读完此文章。

如果您喜欢这篇文章,请点一个赞支持一下博主。

如果您对此文有意见,欢迎在评论区留下你的看法,5ab 会尽力达到。

如果您真的不喜欢这篇文章,也请不要喷,5ab 欢迎私信反馈意见。

原文地址:https://www.cnblogs.com/5ab-juruo/p/abc192-statement_solution.html