Hihocoder 1430 A Boring Problem (数论)
来源:互联网 发布:mac上安装apt get 编辑:程序博客网 时间:2024/06/05 21:10
Problem
对于数字串 S ,
对于每个 i ,求
限制条件
T ≤ 5
N ≤ 50000
k ≤ 100
解题思路
模拟暴力求每一项的结果:
第一项:
(S1)k 第二项:
(S1+S2)k+(S2)k 第三项:
(S1+S2+S3)k+(S2+S3)k+(S3)k …
这样的复杂度将达到
O(N2×logK) ,即使通过预处理出 45 万数(最大前缀和)的 K 次结果,复杂度仍将有O(N2) 考虑前缀和表示结果
第一项:
(Pre1−Pre0)k 第二项:
(Pre2−pre0)k+(Pre2−Pre1)k 第三项:
(Pre3−Pre0)k+(Pre3−Pre1)k+(Pre3−Pre2)k …
将其展开:
第一项:
C0kPrek1+C1kPrek−11(−Pre0)1+...+CkkPre01(−Pre0)k 第二项:
C0kPrek2+C1kPrek−12(−Pre0−Pre1)1+...+CkkPre02(−Pre0−Pre1)k 第三项:
C0kPrek3+C1kPrek−13(−Pre0−Pre1−Pre2)1+...+CkkPre03(−Pre0−Pre1−Pre2)k
将
对每一项乘法求解的复杂度为
代码
#include<bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;int T, N, k;long long pre[50010][110], pprev[50010][110], c[110][110];char s[50010];void init(){ c[0][0]=1; for(int i=1;i<=100;++i){ c[i][0]=c[i][i]=1; for(int j=1;j<i;++j) (c[i][j]=c[i-1][j-1]+c[i-1][j]) %= mod; }}int main(){ init(); scanf("%d", &T); while(T--) { scanf("%d %d %s", &N, &k, s+1); for(int i=1;i<=N;i++) { pre[i][0] = 1; pre[i][1] = pre[i-1][1] + s[i]-'0'; for(int m=2;m<=k;m++) pre[i][m] = (pre[i][m-1] * pre[i][1]) % mod; } for(int i=1;i<=N;i++) { for(int m=0;m<=k;m++) (pprev[i][m] = pprev[i-1][m] + (m%2?-1:1) * pre[i][m]) %= mod; } for(int i=1;i<=N;i++) { long long ans = 0; for(int m=0;m<=k;m++) { ans += c[k][m] * pre[i][k-m] % mod * pprev[i-1][m] % mod + mod; ans %= mod; } printf("%lld%c", ans, i==N?'\n':' '); } }}
阅读全文
0 0
- Hihocoder 1430 A Boring Problem (数论)
- hihoCoder 1430 A Boring Problem(数论)
- Hihocoder 1430 Problem I. A Boring Problem (二项式定理
- HDU 5793 A Boring Question(数论)
- 【hihocoder1430】 A Boring Problem
- A + B Problem + 数论
- hihoCoder 1259 A Math Problem(数位dp)
- Problem 1057 a^b(数论)
- 【数论】hdu4143 A Simple Problem
- hdu4143 A Simple Problem(数论)
- HDU 4143 A Simple Problem(数论-水题)
- hdu 1792 A New Change Problem(数论)
- hdu 5832 A water problem(简单数论)
- CodeForces 633 B.A Trivial Problem(二分+数论)
- HDU 5974 A Simple Math Problem (数论+解方程组)
- HDU 5974 A Simple Math Problem(数论)
- hdu 5974 A Simple Math Problem (数论思路)
- [acm/icpc2016北京赛区][hihocoder1430] A Boring Problem 推公式
- PAT1022~~~
- 1000. A+B Problem
- 利用AndroidStudio添加其它语言目录
- Java8系列(错误解决)--maven编译时"-source 1.5 中不支持 lambda 表达式"问题的解决
- 搭建Python开发环境时遇到问题小记
- Hihocoder 1430 A Boring Problem (数论)
- 51Nod-1091 线段的重叠【排序】
- Java中Set的使用
- NSNotification
- CodeForces
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
- dom4j 解析xml 并且进行增加,删除 操作后重新生成xml文件
- codeforces 490-C. Hacking Cypher(暴力)
- 新手上路之oracle 视图 索引(了解)笔记