4277: Sequence

Time Limit(Common/Java):2000MS/6000MS     Memory Limit:65536KByte
Total Submit:
39
          
Accepted:11

Description

YXH is very fond of the sequence. One day he found a very interesting sequence.
At time T, a sequence A is
A(1),A(2),...,A(n)
After one second (at time T + 1), the sequence will become
A(1),A(2)+2A(1),A(3)+2A(2)+3A(1),…,A(n)+2A(n-1)+...+nA(1)
YXH wants to know the sequence at time K. Can you solve this problem?

Input

There are multiple test cases.
For each case, the first line contains a number N indicating the length of the sequence. The second line contains N numbers indicating the sequence in time 0. The third line contains a number K as description above.

1 <= N <= 300, 1 <= K <= 1,000,000,000
The value of each number in the sequence will not exceed 300.

Output

For each case, print the sequence at time K in one line. Since the answer could be very large, you should output the answer module 1,000,000,007

Sample Input

3
1 2 3
2

Sample Output

1 6 21

Source

2012年武汉大学第六届E鸣杯程序设计竞赛

看似矩阵快速幂,但是这个矩阵是300*300的矩阵,很容易就爆炸了,因为矩阵乘法是n^3的,再做快速幂是logk

这个矩阵的构造应该不算是很难吧,就是填1到n,然后斜线上的值是一样的

矩阵快速幂代码

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
const int N=,MD=1e9+,INF=0x3f3f3f3f;
const double eps=1e-,e=exp(),PI=acos(-.);
typedef long long ll;
int G;
struct MX
{
int v[N][N];
void O()
{
memset(v,,sizeof v);
}
void E()
{
memset(v,,sizeof v);
for(int i=; i<G; i++)
for(int j=i;j<G;j++)v[i][j]=j-i+;
}
void P()
{
for(int i=; i<G; i++)
for(int j=; j<G; j++)printf(j==G-?"%d\n":"%d ",v[i][j]);
}
MX operator+(const MX &b) const
{
MX c;
c.O();
for(int i=; i<G; i++)
for(int j=; j<G; j++)c.v[i][j]=v[i][j]+b.v[i][j];
return c;
}
MX operator*(const MX &b)const
{
MX c;
c.O();
for(int k=; k<G; k++)
for(int i=; i<G; i++)
if(v[i][k])for(int j=; j<G; j++)c.v[i][j]=(c.v[i][j]+1LL*v[i][k]*b.v[k][j]%MD)%MD;
return c;
}
MX operator^(int p)const
{
MX y,x;
y.E(),memcpy(x.v,v,sizeof(v));
for(; p; x=x*x,p>>=)if(p&)y=y*x;
return y;
}
} a,ans;
int main()
{
//ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n,k;
while(~scanf("%d",&n))
{
G=n;
a.O();
for(int i=; i<n; i++)scanf("%d",&a.v[][i]);
scanf("%d",&k);
ans.E();
ans=ans^(k-);
ans=a*ans;
for(int i=; i<n; i++)printf(i==G-?"%d\n":"%d ",ans.v[][i]);
}
return ;
}

接下来进入找规律环节,找个p的规律啊。

因为我比较傻,还以为这个还是和快速幂的拼凑有关的,就只去了打了2 4  16 256的值,很难发现规律

然后我每个都打了一次

k=0显而易见 1 2 3 4 5 6

k=1  1 2 ...

k=2  1 4 ...

反正你很快会发现就是这一项是C(i,2k-1+i)

所以你很想到组合数

但是直接求组合数可行么,是可行的,当然k很大,你不会玩

其实就是乘上新加的数,除以i,当然这个题目要除以逆元

#include<stdio.h>
const int N=,MD=1e9+;
int a[N],b[N],v[N],n,k,i,j;
int main()
{
v[]=b[]=;
for(int i=;i<N;i++)v[i]=1LL*v[MD%i]*(MD-MD/i)%MD;
while(scanf("%d",&n)!=EOF)
{
for(i=; i<n; i++)scanf("%d",&a[i]);
scanf("%d",&k);
long long t=*k;
for(i=; i<n; i++,t++)b[i]=t*b[i-]%MD*v[i]%MD;
for(i=n-; i>; i--)
for(j=; j<=i; j++)a[i]=(a[i]+b[j]*1LL*a[i-j])%MD;
for(i=; i<n; i++)printf(i==n-?"%d\n":"%d ",a[i]);
}
return ;
}

TOJ4277: Sequence 组合数学的更多相关文章

  1. Sequence(组合数学,集合不同元素的个数)

    Sequence [组合数学] 时间限制: 3 Sec  内存限制: 128 MB 提交: 138  解决: 52 [提交][状态][讨论版] 题目描述 在某个夜黑月高的晚上,!!!,原谅我编不下去了 ...

  2. hdu(2062)-Subset sequence 组合数学

    意甲冠军:查找集合{1,2,3...n}第一m一个排列子. 收集的线索所行的大小. 例两个元素的排列子集合按字典树排列是:{1},{1,2},{2},{2,1}: 解法:一个一个元素来确定,每次把剩余 ...

  3. 2018 ACM-ICPC 区域赛(青岛站)题解整理

    题目链接 C - Flippy Sequence(组合数学+分类讨论) 两区间异或一下,分段考虑,如果全为0则任选两相同区间,答案为$C_{n+1}^{2}=\frac{n(n+1)}{2}$,只有一 ...

  4. BZOJ 1005 [HNOI2008] 明明的烦恼(组合数学 Purfer Sequence)

    题目大意 自从明明学了树的结构,就对奇怪的树产生了兴趣...... 给出标号为 1 到 N 的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? Input 第一行为 N( ...

  5. hdu4675 GCD of Sequence 莫比乌斯+组合数学

    /** 题目:hdu4675 GCD of Sequence 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给定n个数的a数组,以及m,k: ...

  6. bzoj 1005 组合数学 Purfer Sequence

    这题需要了解一种数列: Purfer Sequence 我们知道,一棵树可以用括号序列来表示,但是,一棵顶点标号(1~n)的树,还可以用一个叫做 Purfer Sequence 的数列表示 一个含有 ...

  7. poj 1019 Number Sequence 【组合数学+数字x的位宽函数】

    题目地址:http://poj.org/problem?id=1019 Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total ...

  8. hdu4908 &amp; BestCoder Round #3 BestCoder Sequence(组合数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 BestCoder Sequence Time Limit: 2000/1000 MS (Jav ...

  9. Codeforces 1264D - Beautiful Bracket Sequence(组合数学)

    Codeforces 题面传送门 & 洛谷题面传送门 首先对于这样的题目,我们应先考虑如何计算一个括号序列 \(s\) 的权值.一件非常显然的事情是,在深度最深的.是原括号序列的子序列的括号序 ...

随机推荐

  1. jquery获取当前被选择的复选框的value的集合

    1.HTML代码 <input type="checkbox" name="productID" value="0"> < ...

  2. C# 简单创建和删除文件夹

    文章转自http://www.cnblogs.com/pegasus923/archive/2011/01/26/1944838.html C#中对文件夹操作需要用到Directory Class.其 ...

  3. jsp另外五大内置对象之config

    //配置web.xml <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=&q ...

  4. Linux 的数字权限意义

    三个组 每个都有三个权限 r w x每个权限用二进制 0 和 1 标示 1即为有此权限 0 标示无权限  ower    group  other  r w x    r w x  r w x 每个组 ...

  5. CodeForces 52C Circular RMQ (线段树)

    线段树区间更新维护最小值...记得下放标记... 如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变, 会改变是因为一部分改变而另外一部分没有改变所以维护一下就好. 询问的时候也要 ...

  6. Python 继承、派生、组合、接口、抽象类

    继承是一种是的关系,和组合对比,组合是一种有的关系,这两者都是解决代用重用问题的 继承 注意:继承不是遗传,在显示角度中,是通过对象抽象成类,再把这些类抽象成一个,就是父类.是自下而上的过程,在程序中 ...

  7. python之道08

    1.有如下文件,a1.txt,里面的内容为: 某某是最好的学校, 全心全意为学生服务, 只为学生未来,不为牟利. 我说的都是真的.哈哈 分别完成以下的功能: a,将原文件全部读出来并打印. 答案 f ...

  8. 简易数据分析 02 | Web Scraper 的下载与安装

    这是简易数据分析系列的第 2 篇文章. 上篇说了数据分析在生活中的重要性,从这篇开始,我们就要进入分析的实战内容了.数据分析数据分析,没有数据怎么分析?所以我们首先要学会采集数据. 我调研了很多采集数 ...

  9. vs2015驱动开发中使用RtlStringCchPrintfW()报错

    法一: 在头顶添加一段代码 #pragam comment(lib,"xxxxxx.lib") 法二: 右击工程点属性,选择Linker下的Input,在依赖项后面写上$(DDK_ ...

  10. Bootstrap历练实例:带链接的警告

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...