求调 22分拿了16分不知道哪里错了
查看原帖
求调 22分拿了16分不知道哪里错了
1106289
KomorKomor楼主2024/5/17 16:25
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#define ll long long
#define nn 998244353
using namespace std;

ll v[200010];
ll lenlen[200010][11];
//这个数据结构储存的是后i个数中,长度j的数字的情况
ll ans,n;

void solve()
{
    cin>>n;
    for(int i=1;i<=n;i++)   cin>>v[i];
    //f(i,j)=ai*len(aj)+aj;
    for(int i=n;i>=1;i--)
    {
        int lens=to_string(v[i]).length();
        ans+=(ll)((v[i]%nn*(i-1)%nn))%nn;
        for(int j=1;j<=10;j++)   lenlen[i][j]=lenlen[i+1][j];//后缀和
        for(int j=1;j<=10;j++)   ans+=(((ll)(v[i]%nn*(ll)pow(10,j)%nn)%nn*lenlen[i][j]%nn)%nn)%nn;
        lenlen[i][lens]++;//边做边统计
    }
    cout<<ans%nn<<endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--)   solve();
    return 0;
}
2024/5/17 16:25
加载中...