1 solutions

  • 1
    @ 2023-4-29 16:31:57

    找规律大法好

    首先,暴力打表得到这串数。

    10 180 2610 34200 423000 5040000 58500000 666000000
    

    做一遍前缀和。

    10 190 2800 37000 460000 5500000 64000000 730000000
    

    再做一遍前缀和。

    10 200 3000 40000 500000 6000000 70000000 800000000
    

    可以看出此时第 ii 项为 i×10ii\times 10^i

    于是返回去,我们直接两次差分即可。

    for(int i = 1;i <= n;i++){
       	ans[i] = ans[i - 1] * 10 % mod;
    }
    ans[0] = 0;
    for(int i = 1;i <= n;i++){
       	ans[i] = ans[i] * i % mod;
    }
    for(int i = 1;i <= n;i++){
       	res[i] = ans[i] - ans[i - 1];
    }
    for(int i = 1;i <= n;i++){
       	ans[i] = res[i] - res[i - 1];
    }
    for(int i = n;i >= 1;i--){
    	cout<<(ans[i] % mod + mod) % mod<<' ';
    }
    
    • 1

    Information

    ID
    3446
    Time
    2000ms
    Memory
    256MiB
    Difficulty
    6
    Tags
    # Submissions
    3
    Accepted
    1
    Uploaded By