就是我不用 atcoder mint 写出来是这个样子
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int P = 998244353;
const int N = 1e6 + 10;
int n;
int a[N];
int d[N];
int t[N];
signed main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> a[i];
d[to_string(a[i]).size()]++;
}
t[0] = 1;
for(int i=1; i<=10; i++)
{
t[i] = t[i-1] * 10 % P;
}
int res = 0;
for(int i=1; i<=n; i++)
{
res += a[i] * (i - 1);
d[to_string(a[i]).size()]--;
for(int j=1; j<=10; j++)
{
res += a[i] * t[j] * d[j];
}
res %= P;
}
cout << res;
return 0;
}
但是他 wa 了 18 个点。
这是用了 atcoder mint 的
#include<bits/stdc++.h>
#include "atcoder/modint"
using namespace std;
using mint = atcoder::modint998244353;
#define int long long
const int P = 998244353;
const int N = 1e6 + 10;
int n;
int a[N];
int d[N];
mint t[N];
signed main()
{
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> a[i];
d[to_string(a[i]).size()]++;
}
t[0] = 1;
for(int i=1; i<=10; i++)
{
t[i] = t[i-1] * 10;
}
mint res = 0;
for(int i=1; i<=n; i++)
{
res += a[i] * (i - 1);
d[to_string(a[i]).size()]--;
for(int j=1; j<=10; j++)
{
res += a[i] * t[j] * d[j];
}
}
cout << res.val();
return 0;
}
然后就对了。