北京师范大学第十六届程序设计竞赛决赛-重现赛-B题
一、题目链接
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题的更多相关文章
- 北京师范大学第十六届程序设计竞赛决赛 I 如何办好比赛
链接:https://www.nowcoder.com/acm/contest/117/I来源:牛客网 如何办好比赛 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 北京师范大学第十六届程序设计竞赛决赛 F 汤圆防漏理论
链接:https://www.nowcoder.com/acm/contest/117/F来源:牛客网 汤圆防漏理论 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 北京师范大学第十六届程序设计竞赛决赛 C萌萌哒身高差
链接:https://www.nowcoder.com/acm/contest/117/C来源:牛客网 萌萌哒身高差 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...
- 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
Problem B 迷宫寻宝 Accept: 52 Submit: 183Time Limit: 1000 mSec Memory Limit : 32768 KB Problem De ...
- 长春理工大学第十四届程序设计竞赛(重现赛)M.Orx Zone
链接:https://ac.nowcoder.com/acm/contest/912/M 题意: Daenerys Stormborn, 风暴中出生的丹尼莉丝,the Unburnt, 烧不死的,Qu ...
- 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream
链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...
- 长春理工大学第十四届程序设计竞赛(重现赛)J.Printout
链接:https://ac.nowcoder.com/acm/contest/912/J 题意: 小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板. 到了打字社,小r一看价格:总打印页数 ...
- 长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order
链接:https://ac.nowcoder.com/acm/contest/912/I 题意: Fate Grand Order是型月社发行的角色扮演类手机游戏,是著名的氪金抽卡"垃圾&q ...
- 长春理工大学第十四届程序设计竞赛(重现赛)H.Arithmetic Sequence
题意: 数竞选手小r最喜欢做的题型是数列大题,并且每一道都能得到满分. 你可能不相信,但其实他发现了一个结论:只要是数列,无论是给了通项还是给了递推式,无论定义多复杂,都可以被搞成等差数列.这样,只要 ...
随机推荐
- TCGA系列--GDCRNATools
https://github.com/Jialab-UCR/GDCRNATools GDCRNATools - An R package for downloading, organizing, an ...
- sudo环境变量问题;程序库函数寻找
1. sudo 和 root不完全等效,继承的环境变量不一样,最主要的区别还是输入的密码不同. 2. 使用sudo去执行一个程序时,出于安全的考虑,这个程序将在一个新的.最小化的环境中执行,也就是说, ...
- SSH防止暴力破解--fail2ban
一.ssh密钥对无交互登录 实战1:通过密钥进行sshd服务认证 服务端:linl_S IP:10.0.0.15 客户端:lin_C IP:10.0.0.16 1)在客户端生成密钥对 ...
- Angular i18n
Angular2中使用ngx-translate进行国际化http://blog.csdn.net/u014291497/article/details/61233033 在 Angular 项目中添 ...
- JAVA消息 JMS 很重要
首先大致讲一下,java 消息模块 消息,个人理解分为两种:1.同步消息(RPC调用) 2.异步消息(本篇讲解部分) 一.同步消息java提供了多种方案: 最新比较常用的方式就是spring Http ...
- Java中HashMap的put与get方法原理
直接上代码 注: 代码来自于 Java 9 put方法 public V put(K key, V value) { return putVal(hash(key), key, value, fals ...
- JSP 生命周期
JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...
- SharePoint开发 - TimerJob简单实例讲解
博客地址 http://blog.csdn.net/foxdave SharePoint中的TimerJob类似于Windows系统的计划任务,可以实现定时执行指定操作的功能. 本篇所述的实例为在Sh ...
- 右键添加git bush here
由于sourcetree自动安装的git,导致右键没有git bush here,那么我们就自己添加一下. 运行regedit.exe进入注册表,在HKEY_CLASSES_ROOT\Director ...
- 接口测试HttpClient实践20150925
用了工具做接口测试,但是对于加密数据和结果的比对,以及批量数据读取,回头还是觉得代码来更方便灵活,从excle中读取数据,构成参数,发请求,并获取返回结果和预期值比较,并将结果输出程报告,可以深入做成 ...