DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

Pi Problem

문제로 돌아가기

해설

P=998 244 353P=998\,244\,353P=998244353이라 하자. aaa의 자릿수가 ddd이면 rep(a,b)\mathrm{rep}(a,b)rep(a,b)는 다음과 같다.

rep(a,b)=a∑k=0b−110dk=a10db−110d−1.\mathrm{rep}(a,b)=a\sum_{k=0}^{b-1}10^{dk}=a\frac{10^{db}-1}{10^d-1}.rep(a,b)=ak=0∑

1≤d≤101\leq d\leq101≤d≤10에서 10d−110^d-110d−1은 PPP의 배수가 아니므로 모듈러 역원으로 나눗셈을 계산할 수 있다. G를 위 식의 등비급수 부분을 로 나눈 나머지라고 하자.

AiA_iAi​의 자릿수를 did_idi​라 하자. 인덱스 iii가 왼쪽 끝인 모든 쌍의 곱은 다음과 같다.

AiN−i∏j=i+1NGdi(Aj)A_i^{N-i}\prod_{j=i+1}^{N}G_{d_i}(A_j)AiN−i​j=i+1∏

따라서 오른쪽에서 왼쪽으로 순회하면서 자릿수 ddd별 접미 곱 Sd=∏j>iGd(Aj)S_d=\prod_{j>i}G_d(A_j)Sd​=∏j>i​를 유지한다. 먼저 정답에 를 곱하고, 그다음 모든 에 를 곱한다. 이 순서여야 가 포함되지 않는다.

10d−110^d-110d−1의 역원은 미리 구한다. Gd(Ai)G_d(A_i)Gd​(Ai​를 계산할 때는 를 한 번 구한 뒤 을 차례로 곱해 사용한다. 한 케이스의 시간 복잡도는 , 공간 복잡도는 이다.

증명

각 iii를 처리하기 직전에 SdS_dSd​는 정확히 j>ij>ij>i인 원소들의 Gd(Aj)G_d(A_j)를 모두 곱한 값이다. 처음에는 오른쪽 원소가 없으므로 모든 이다. 의 기여분을 정답에 곱한 뒤 를 에 곱하면 다음 인덱스에 대해서도 불변식이 유지된다.

서브태스크 1에서는 수를 직접 이어 붙여도 된다. 서브태스크 2에서는 모든 쌍을 순회하며 등비급수 식으로 계산한다. 서브태스크 3에서는 자릿수가 항상 111이므로 접미 곱 하나만 관리한다. 전체 조건에서는 자릿수 111부터 101010까지 각각 접미 곱을 관리한다.

Solution written by GPT5

b
−
1
​
1
0dk
=
a10d−110db−1​.
d(b)G_d(b)
Gd​(b)
PPP
N
​
Gdi​​
(
Aj​
)
G
d​
(
Aj​
)
AiN−iSdiA_i^{N-i}S_{d_i}AiN−i​Sdi​​
SdS_dSd​
Gd(Ai)G_d(A_i)Gd​(Ai​)
(i,i)(i,i)(i,i)
)
x=10Ai mod Px=10^{A_i}\bmod Px=10Ai​modP
x1,x2,⋯ ,x10x^1,x^2,\cdots,x^{10}x1,x2,⋯,x10
O(N(10+log⁡N+log⁡max⁡Ai))O(N(10+\log N+\log\max A_i))O(N(10+logN+logmaxAi​))
O(N)O(N)O(N)
Gd​(Aj​)
Sd=1S_d=1Sd​=1
iii
Gd(Ai)G_d(A_i)Gd​(Ai​)
SdS_dSd​

각 쌍 (i,j)(i,j)(i,j)는 왼쪽 끝 iii를 처리할 때 AiA_iAi​ 한 번과 Gdi(Aj)G_{d_i}(A_j)Gdi​​(Aj​) 한 번으로 포함된다. 다른 단계에서는 포함되지 않는다. 따라서 마지막 값이 요구한 모든 쌍의 곱이다.