一、题目链接

  https://www.nowcoder.com/acm/contest/117/B

二、题意

  给定一组序列$a_1,a_2,\cdots,a_n$,表示初始序列$b_1,b_2,\cdots,b_n$经过$k$次变换得到的序列,让你输出输出序列$b_1,b_2,\dots,b_n$。

变换的规则是:
  在每一轮中,把$b_i$加到$b_{i+1}$上($1 \le i < n$),同时对$10^9+7$取模。做$k$轮。最后得到$a_1,a_2,\cdots,a_n$。

 三、思路

  列出计算步骤,得到如下表格:

$k$ $b_1$ $b_2$ $b_3$ $\cdots$ $b_n$
$1$ $b_1$  $b_1+b_2$   $b_1+b_2+b_3$ $\cdots$  $\sum\limits_{i=1}^{n}b_i$ 
$2$   $b_1$  $2*b_1+b_2$ $3*b_1+2*b_2+b_3$  $\cdots$  上一行的和 
$3$   $b_1$ $3*b_1+b_2$  $6*b_1+3*b_2+b_3$  $\cdots$  上一行的和 
 $\cdots$   $\cdots$   $\cdots$   $\cdots$   $\cdots$  $\cdots$ 

  拿$b_i$来找规律。可以发现,它的多项式系数与$k$的关系。从大到小的系数为如下表格:

$j=1$ $1$ $2$ $3$ $6$ $\cdots$ $k$
$j=2$ $1$ $3$ $6$ $10$ $\cdots$ $\frac{(1+k)*k}{2}$
$j=3$ $1$ $4$ $10$ $20$ $\cdots$ $\cdots$
$\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$
$j=n$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$

  其中,$j$为到$i$的距离,且$j<i$。然后,把它转化成如下表格:

$j=1$ $C_1^1$ $C_2^1$ $C_3^1$ $C_4^1$ $\cdots$ $C_k^1$
$j=2$ $C_2^2$ $C_3^2$ $C_4^2$ $C_5^2$ $\cdots$ $C_{k+1}^2$
$j=3$ $C_3^3$ $C_4^3$ $C_5^3$ $C_6^3$ $\cdots$ $C_{k+2}^3$
$\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$ $\cdots$
$j=n$ $C_n^n$ $C_{n+1}^n$ $C_{n+2}^n$ $C_{n+3}^n$ $\cdots$ $C_{k+n-1}^n$

  有了上述表格后,用lucas定理求出最后一列,时间复杂度$O(N^2*log(10^9+7))$,再$O(N^2)$复杂度求出每一项的初始值$b_i$即可。所以,总的复杂度为$O(T*N^2*log(10^9+7))$。

  注意,这题卡常卡的很厉害,需要对$k$分情况处理。如果$k$较小,$k \le 1000$,直接暴力。否则,用算法。

  另外,还要注意$k=0$的情况。

  求$C_n^m$,用的是这个式子:$C_n^m=\frac{n!}{(n-m)!*m!}=\frac{A_n^m}{m!}=\prod\limits_{i=1}^{m}\frac{n-m+i}{i}$

四、代码

/*---------------------template head-----------------------------*/
#include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define mk(x, y) make_pair(x, y)
#define pln() putchar('\n')
#define cln() (cout << '\n')
#define fst first
#define snd second
#define MOD 1000000007LL
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
;

template <class T> inline void read(T &x) {
    int t;
    bool flag = false;
    ')) ;
    ';
     + t - ';
    if(flag) x = -x;
}

template<class T> T gcd(T a, T b) {
    return b ? gcd(b, a % b) : a;
}
/*---------------------template head-----------------------------*/

LL quick_mod(LL a, LL b, LL p) {
    LL ans = ;
    a %= p;
    while(b) {
        )ans = ans * a % p;
        a = a * a % p;
        b >>= ;
    }
    return ans % p;
}

LL C(LL n, LL m, LL p) {
    ;
    LL ans = ;
    ; i <= m; i++) {
        LL a = (n + i - m) % p;
        LL b = i % p;
        ans = ans * (a * quick_mod(b, p - , p) % p) % p;
    }
    return ans % p;
}

LL lucas(LL n, LL m, LL p) {
    ) ;
    return C(n % p, m % p, p) * lucas(n / p, m / p, p) % p;
}

LL NN, K, a[MAXN], ans[MAXN], cc[MAXN], buf[MAXN];
int main() {
    //freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    int T;
    for(scanf("%d", &T); T--;) {
        read(NN), read(K);
        ; i <= NN; ++i)read(a[i]);
        )memcpy(ans + , a + , ]) * NN);
        ) {
            ans[] = a[];
            memcpy(buf + , a + , ]) * NN);
            ; i < K; ++i) {
                ; j <= NN; ++j) {
                    ans[j] = (buf[j] - buf[j - ] + MOD) % MOD;
                    ans[j] = (ans[j] + MOD) % MOD;
                }
                memcpy(buf + , ans + , ]) * NN);
            }
        }
        else {
            ; i <= NN; ++i)cc[i] = lucas(K + i - , i, MOD) % MOD;
            ans[] = a[];
            ; i <= NN; ++i) {
                LL sum = ;
                , p = i - ; p >= ; j++, p--) {
                    sum = (sum + cc[j] * ans[p]) % MOD;
                }
                ans[i] = (a[i] - sum + MOD) % MOD;
                ans[i] = (ans[i] + MOD) % MOD;
            }
        }
        ; i <= NN; ++i)printf("%lld%c", ans[i], i == NN ? '\n' : ' ');
    }
    ;
}

北京师范大学第十六届程序设计竞赛决赛-重现赛-B题的更多相关文章

  1. 北京师范大学第十六届程序设计竞赛决赛 I 如何办好比赛

    链接:https://www.nowcoder.com/acm/contest/117/I来源:牛客网 如何办好比赛 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  2. 北京师范大学第十六届程序设计竞赛决赛 F 汤圆防漏理论

    链接:https://www.nowcoder.com/acm/contest/117/F来源:牛客网 汤圆防漏理论 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  3. 北京师范大学第十六届程序设计竞赛决赛 C萌萌哒身高差

    链接:https://www.nowcoder.com/acm/contest/117/C来源:牛客网 萌萌哒身高差 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  4. 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝

    Problem B 迷宫寻宝 Accept: 52    Submit: 183Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem De ...

  5. 长春理工大学第十四届程序设计竞赛(重现赛)M.Orx Zone

    链接:https://ac.nowcoder.com/acm/contest/912/M 题意: Daenerys Stormborn, 风暴中出生的丹尼莉丝,the Unburnt, 烧不死的,Qu ...

  6. 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream

    链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...

  7. 长春理工大学第十四届程序设计竞赛(重现赛)J.Printout

    链接:https://ac.nowcoder.com/acm/contest/912/J 题意: 小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板. 到了打字社,小r一看价格:总打印页数 ...

  8. 长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order

    链接:https://ac.nowcoder.com/acm/contest/912/I 题意: Fate Grand Order是型月社发行的角色扮演类手机游戏,是著名的氪金抽卡"垃圾&q ...

  9. 长春理工大学第十四届程序设计竞赛(重现赛)H.Arithmetic Sequence

    题意: 数竞选手小r最喜欢做的题型是数列大题,并且每一道都能得到满分. 你可能不相信,但其实他发现了一个结论:只要是数列,无论是给了通项还是给了递推式,无论定义多复杂,都可以被搞成等差数列.这样,只要 ...

随机推荐

  1. Gym 101334F Feel Good

    http://codeforces.com/gym/101334 题意:给定一串数,求一个区间,使得该区间的所有数之和乘以该区间内最小的数的乘积最大. 思路:先预处理一下,计算出前缀和. 我们可以把每 ...

  2. [转][osg]osg渲染引擎框架图,流程图(根据《最长一帧》整理)

    转自:http://m.blog.csdn.net/article/details?id=49679731 本文参考<<osg最长一帧>>, <<OpenScene ...

  3. HDU1166 敌兵布阵_线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. IEnumerable<T> 接口和GetEnumerator 详解

    IEnumerable<T> 接口 .NET Framework 4.6 and 4.5   公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代. 若要浏览此类型的.NET Frame ...

  5. SpringBoot 使用 EhCache2.x 缓存(三十一)

    SpringBoot 使用 EhCache2.x 缓存入门很简单,废话少说上干货: 1.在POM.xml中增加jar包 <!--开启 cache 缓存--> <dependency& ...

  6. [转载]java正则表达式

    转载自:http://butter.iteye.com/blog/1189600 1.正则表达式的知识要点1.正则表达式是什么?正则表达式是一种可以用于模式匹配和替换的强有力的工具.2.正则表达式的优 ...

  7. Alpha冲刺一 (8/10)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10023260.html 作业博客:https://edu.cnblogs.com/campus ...

  8. HDU 1533

    http://acm.hdu.edu.cn/showproblem.php?pid=1533 人和房子数量相同,每个人进房子,费用是人到房子的曼哈顿距离,求最小费用 可用最小费用最大流求解,建立虚拟的 ...

  9. 爸妈才是最好的避孕药--------"北大状元拉黑父母事件的一些感想"

    今天看了这么一篇文章,地址:  http://mini.eastday.com/mobile/180131180318786.html <北大状元拉黑父母6年:你敢恨爸妈,可你敢原谅他们吗?&g ...

  10. ssh远程操作服务器

    登录方式 ssh account@192.168.xxx.xxx 输入密码 远程上传下载文件 上传: scp filepath acount@192.168.xxx.xxx:path filepath ...