solution - CF1422C

· · 题解

补背包 4/48

但是好像不是背包()也不知道为啥教练把这道题放到背包题单里……

Solution

首先拆贡献,考虑一个数 a_in 从大到小弟 i 位)会产生多少贡献。

那么分两种情况讨论。

时间复杂度 O(n)

Code

int n,a[N],pw10[N];

signed main()
{
    pw10[0]=1; rep(i,1,N-1) pw10[i]=mod_(pw10[i-1]*10);

    string s; read(s),n=s.size();
    rep(i,1,n) a[i]=s[i-1]-'0';

    int ans=0,tmp=0;
    rep(i,1,n) i && add(tmp,i-1),add(ans,mod_(a[i]*tmp*pw10[n-i]));
    tmp=0;
    rpe(i,n,1) i && add(tmp,mod_((n-i)*pw10[n-i-1])),add(ans,mod_(tmp*a[i]));
    write(ans);

    return 0;
}

华风夏韵,洛水天依!