CF468C 【Hack it!】
首先有一个性质,对于\(1\le x< 10^{18}\)有\(f(x+10^{18})=f(x)+1\)
可以注意到:
\[\sum_{i=1}^{10^{18}-1}f(i)=x(~mod~~a~ )
\]
于是就有:
\[\sum_{i=1}^{10^{18}}f(i)=\sum_{i=1}^{10^{18-1}}+f(0+10^{18})-f(0)=x+1(~~mod~~a ~~)
\]
同样也可以得到:
\[\sum_{i=t}^{10^{18}-1+t}f(i)=x+t(~mod~~a~)
\]
假设 \(x=0\),那么直接输出 \(1\) 和 \(10^{18}-1\)
否则可以想到 \(t=a-x\)
然后直接输出 \(l=t\) 和 \(r=10^{18}-1+t\) 即可
于是问题的关键就在于\(\sum_{i=0}^{10^{18}-1}f(i)\)是多少了
下面给出简略证明
可以发现每一个数位贡献的次数是固定的,可以考虑将\(10^{18}-1\)看作是\(18\)个格子,然后放入一些数字,求所有方案放入的数字和
于是可以枚举一个数\(0\le x\le 9\)来计算其贡献次数
可以考虑其恰好出现 \(i\) 次时的答案,那么可以枚举\(i\)个位置选入这个数\(x\),然后接下来\(18-i\)个位置都可以放入除了\(x\)之外的所有数,所以有其贡献次数为:
\[i\times \dbinom{i}{18}\times 9^{18-i}
\]
所以答案就是:
\[\sum_{x=0}^9x\times \sum_{i=0}^{18}i\times \dbinom{i}{18}\times 9^{18-i}
\]
\[45\times \sum_{i=0}^{18}i\times \dbinom{i}{18}\times 9^{18-i}
\]
\[45\times \sum_{i=0}^{18}i\times \dfrac{18!}{i!(18-i)!}\times 9^{18-i}
\]
\[45\times \sum_{i=1}^{18} \dfrac{18\times 17!}{(i-1)!((18-1)-(i-1))!}\times 9^{(18-1)-(i-1)}
\]
\[18\times45\times \sum_{i=0}^{17} \dfrac{17!}{i!(17-i)!}\times 9^{17-i}
\]
\[18\times45\times \sum_{i=0}^{17} \dbinom{17-i}{17} 9^{17-i}
\]
\[18\times45\times10^{17}
\]
\[9\times 9\times 10^{18}
\]
#include<bits/stdc++.h>
using namespace std ;
#define rep( i, s, t ) for( register int i = s; i <= t; ++ i )
#define re register
#define int long long
int gi() {
char cc = getchar() ; int cn = 0, flus = 1 ;
while( cc < '0' || cc > '9' ) { if( cc == '-' ) flus = - flus ; cc = getchar() ; }
while( cc >= '0' && cc <= '9' ) cn = cn * 10 + cc - '0', cc = getchar() ;
return cn * flus ;
}
int P = 1e18, l, r ;
signed main()
{
int A = gi() ;
l = A - ( ( P % A ) * 9 % A * 9 ) % A, r = l + P - 1 ;
printf("%lld %lld", l, r ) ;
return 0 ;
}
qwq

浙公网安备 33010602011771号