求问刚刚结束的abc的D
  • 板块学术版
  • 楼主gghack_Nythix
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/6/8 21:46
  • 上次更新2024/6/9 08:30:33
查看原帖
求问刚刚结束的abc的D
895690
gghack_Nythix楼主2024/6/8 21:46

rt,赛时刚了很久都没调出来。

Vn=n10log⁡10(n+1)∗n−110log⁡10(n+1)−1V_n=n\frac{10^{ {\log_{10}(n+1)} * n} - 1}{10^{ \log_{10}{(n + 1)} }-1}

不太会LaTeXLaTeX,看代码也许好一点。

#include<bits/stdc++.h>
#define int __int128
using namespace std;
const int mod = 998244353;
char buf[1 << 20],*p1,*p2;
#define getc() getchar()
int read(){int x = 0,w = 1;char cc = getc();if(cc < '0' || cc > '9'){if(cc == '-')w = -1;cc = getc();}while(cc <= '9' && cc >= '0'){x = x * 10 + (cc ^ 48);cc = getc();}return x * w;}
inline void print(int x){if(x < 0){x = -x;putchar('-');}if(x > 9)print(x / 10);putchar(x % 10 + 48);}
int ans;
int ksc(int a, int k, int p) // 龟速乘
{
    int res = 0;
    while (k)
    {
        if (k & 1) res = (res + a) % p;
        a = (a + a) % p; 
        k >>= 1;
    }
    return res;
}
int ksm(int a,int b){ 
	int ans = 1;
	while(b){
		if(b & 1)ans = ksc(ans,a,mod);
		a = ksc(a,a,mod);
		b >>= 1;
	}
	return ans % mod;
}
int getinv(int n,int md) {return ksm(n,md - 2) % mod;}
signed main(){
	long long n;
	n = read();
	int len = n - 1,L = floor(log10(n) + 1);
	int ny = getinv(ksm(10,L) - 1,mod);
	print(((n % mod) * ((ksm(10,(L * (len + 1)) % mod) - 1) * (ny % mod)) % mod) % mod);
	return 0;
}

n≤10n\leq 10 时验证了是对的。

2024/6/8 21:46
加载中...