zoukankan      html  css  js  c++  java
  • 牛客:牛牛的算术(线性递推)

    题意:

    链接:https://ac.nowcoder.com/acm/contest/7079/B来源:牛客网

    牛牛最近学习了取模是什么 于是他看到了下面这一道题:

    多次询问:每次询问包含一个正整数 nnn 要求你输出下列结果
    ∏i=1n∑j=1i∑k=1ji×j×kprod_{i=1}^n sum_{j=1}^i sum_{k=1}^j i imes j imes ki=1nj=1ik=1ji×j×k
    为了避免结果过大 只需要输出这个式子对 199999199999199999(=2×32×41×271+1=2 imes 3^2 imes 41 imes 271+1=2×32×41×271+1,一个质数) 取模的结果。

    题解:

    线性递推一下,答案从n-1到n之间的转移应该是比较显然的。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+100;
    const int mod=199999;
    typedef long long ll;
    int t;
    int n;
    ll ans[maxn];
    ll f[maxn];
    ll tt[maxn];
    
    int main () {
        ans[0]=1;
        for (int i=1;i<maxn;i++) {
            f[i]=f[i-1]+i;
            f[i]%=mod;
            tt[i]=tt[i-1]+i*f[i]%mod;
            tt[i]%=mod;
            ans[i]=ans[i-1]*tt[i]%mod*i;
            ans[i]%=mod;
        }
        int t;
        scanf("%d",&t);
        while (t--) {
            string s;
            cin>>s;
            if (s.size()>6) {
                printf("0
    ");
                continue;
            }
            n=0;
            for (int i=0;i<s.size();i++) n=n*10+s[i]-'0';
            if (n>=199999) {
                printf("0
    ");
                continue;
            }
            printf("%lld
    ",ans[n]);
            //for (int i=1;i<=n;i++) printf("%d
    ",cnt[i]);
        }
    }
  • 相关阅读:
    HZNU 2019 Summer training 6
    HZNU 2019 Summer training 5
    HZNU 2019 Summer training 4
    Garlands CodeForces
    HZNU 2019 Summer training 3
    UVA
    HZNU 2019 Summer training 2
    Serge and Dining Room(线段树)
    HZNU 2019 Summer training 1
    【7-10 PAT】树的遍历
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13580184.html
Copyright © 2011-2022 走看看