题解 | #无穷无尽的数#

无穷无尽的力量

https://ac.nowcoder.com/acm/contest/123788/A

F 无穷无尽的数

先以取模确定所截串结尾元素,便可将包括结尾并向前取的n个元素视作新的“循环串x”,此题便成了一道考察 快速幂,逆元和等比数列求和的问题。

(以题目所给样例举例)循环串以第三元素“1”结束,可得新串为“9810191”,而根据所给区间长度确定有57个循环节,每个循环节形似 ,将其求和即为答案的第一部分,而剩下的部分则是不足以构成循环的“头部”,长为 (记为length,此处为1),实际大小还要再乘上,最后把两部分相加就是答案(记得取模)

from sys import stdin,setrecursionlimit
from math import inf,ceil,sqrt
from collections import Counter,deque

def q_pow(i:int,j:int,mod:int)->int:
    res=1
    while j:
        if j&1:
            res=(res*i)%mod
        i=(i*i)%mod
        j>>=1
    return res

mod=998244353

n,l,r=[int(_) for _ in stdin.readline().split()]
x=list(stdin.readline().rstrip())
lth=r-l+1

begin=(r%n+n-1)%n
y=[x[(begin-i+n)%n] for i in range(n-1,-1,-1)] #新的循环节x
num=int(''.join(y))

begin=(l%n+n-1)%n 
head=['0']+[x[(begin+i)%n] for i in range(lth%n)] #头部
head=int(''.join(head))*q_pow(10,lth-lth%n,mod)

cir=lth//n

ny=q_pow(q_pow(10,n,mod)-1,mod-2,mod) #逆元

mid=(q_pow(10,n*cir,mod)-1)*ny%mod #等比数列求和

head=(head+num*mid%mod)%mod 

print(head)
赛时没写完,AK梦破碎
全部评论
大佬好强,orz
点赞 回复 分享
发布于 12-01 21:19 湖南
大神太强了,orz
点赞 回复 分享
发布于 12-01 11:34 湖南
大佬好强,orz
点赞 回复 分享
发布于 11-30 22:21 湖南
蘑菇哥哥太厉害了Orz
点赞 回复 分享
发布于 11-30 22:19 湖南

相关推荐

10-19 00:57
门头沟学院 Java
我不是嘉心糖捏:我刚收到面试捏
投递360集团等公司6个岗位
点赞 评论 收藏
分享
求个付费实习岗位:这种就是吃满时代红利又没啥技术水平,只能靠压力学生彰显优越感的老登,别太在意了
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务