Atcoder-Regular-Contest-#142A题解

Atcoder Regular Contest #142 A - Reverse and Minimize

题目大意

定义操作 f(x)f(x) ,使数字 x 首尾翻转并去除前导零。如 f(142)=241f(2410)=142f(142) = 241,f(2410)=142.

给定正整数NNKK,求[1N][1,N]中有多少正整数xx,使得经过有限次ff操作后,x=Kx=K.

数据规模

1NK10121 \leq N,K \leq 10^{12}

我的思路

预处理KK得到k1=Kk_1=Kk2=f(K)k_2=f(K),然后将k1k2k_1,k_2不断乘以 10,直到大于 N,乘的次数和即为答案

反思与感悟

比赛代码 AC 29, WA 4

题目中说明Find the minimum possible value of x after operations.,即必须是至少进行 1 次操作。所以如果K%10==0,结果为零。同时,必须是the minimum,如果k2 < k1,结果也为零。

读题时不能漏掉每个细节。

tourist

复杂度是lg(n)lg(n),所以可以多循环以简化代码。

to_stringatoll,reverse等函数减少编写难度。