fuzhou 1683 纪念SlingShot ***
Problem 1683 纪念SlingShot
Accept: 361 Submit: 1287
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给定的每个n,输出F(0)+ F(1)+ …… + F(n) mod 2009。
Input
Output
Sample Input
Sample Output
Source
FOJ月赛-2009年2月- Coral
/*
矩阵构造:
假设前N项和为S(n), 那么可以推出 S(n)=S(n-1)+f(n);
得到一个矩阵: | 1 1 0 0 | | s(n-1) | | S(n) |
| 0 3 2 7 | | f(n) | = | f(n+1) |
| 0 1 0 0 | | f(n-1) | | f(n) |
| 0 0 1 0 | | f(n-2) | | f(n-1) | 然后每一个N,一次快速幂,过了?额,下面就是这样的代码
超时ing... 那么就要优化了。优化:题目中矩阵是不变的,只是单纯的问
n的值。保存2^i的结果。每一个数字都能由2^i组成。(二进制优化) 这样就节省了很多的时间。
484 ms 特别注意:
在最初的编写过程中,我只是用 (M_tom.mat[1][1]*4+M_tom.mat[1][2]*5)%mod;
这样做的结果是答案偏小了。问题在于还要加上 (M_tom.mat[1][3]*3+M_tom.mat[1][4]*1);
这就是数学的问题了.....囧
动手试一试
*/ /*
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef __int64 LL;
const __int64 mod=2009; struct Matrix
{
LL mat[6][6];
void ini()
{
memset(mat,0,sizeof(mat));
}
void first_ini()
{
for(LL i=1;i<=4;i++)
for(LL j=1;j<=4;j++)
if(i==j) mat[i][j]=1;
else mat[i][j]=0;
}
}M_hxl,M_tom; void make_first()
{
M_hxl.mat[1][1]=1;M_hxl.mat[1][2]=1;M_hxl.mat[1][3]=0;M_hxl.mat[1][4]=0;
M_hxl.mat[2][1]=0;M_hxl.mat[2][2]=3;M_hxl.mat[2][3]=2;M_hxl.mat[2][4]=7;
M_hxl.mat[3][1]=0;M_hxl.mat[3][2]=1;M_hxl.mat[3][3]=0;M_hxl.mat[3][4]=0;
M_hxl.mat[4][1]=0;M_hxl.mat[4][2]=0;M_hxl.mat[4][3]=1;M_hxl.mat[4][4]=0;
} Matrix Multiply(Matrix cur,Matrix now)
{
Matrix ww;
ww.ini();
for(LL i=1;i<=4;i++)
for(LL k=1;k<=4;k++)
if(cur.mat[i][k])
{
for(LL j=1;j<=4;j++)
if(now.mat[k][j])
{
ww.mat[i][j]+=cur.mat[i][k]*now.mat[k][j];
if(ww.mat[i][j]>=mod)
ww.mat[i][j]%=mod;
}
}
return ww;
} void power_sum2(LL n)
{
M_tom.first_ini();
while(n)
{
if(n&1)
{
M_tom=Multiply(M_hxl,M_tom);
}
n=n>>1;
M_hxl=Multiply(M_hxl,M_hxl);
}
LL sum=0;
sum=(sum+M_tom.mat[1][1]*4)%mod;
sum=(sum+M_tom.mat[1][2]*5)%mod;
sum=(sum+M_tom.mat[1][3]*3)%mod;//!!!开始时没有加
sum=(sum+M_tom.mat[1][4]*1)%mod;//!!!开始时没有加
printf("%I64d\n",sum);
} int main()
{
LL T,n,i;
while(scanf("%I64d",&T)>0)
{
for(i=1;i<=T;i++)
{
scanf("%I64d",&n);
printf("Case %I64d: ",i);
if(n==0)printf("1\n");
else if(n==1) printf("4\n");
else if(n==2) printf("9\n");
else
{
make_first();
power_sum2(n-1);
}
}
}
return 0;
} */ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
typedef __int64 LL;
const __int64 mod=; struct Matrix
{
LL mat[][];
void ini()
{
memset(mat,,sizeof(mat));
}
void first_ini()
{
for(LL i=;i<=;i++)
for(LL j=;j<=;j++)
if(i==j) mat[i][j]=;
else mat[i][j]=;
}
void init()
{
mat[][]=;mat[][]=;mat[][]=;mat[][]=;
mat[][]=;mat[][]=;mat[][]=;mat[][]=;
mat[][]=;mat[][]=;mat[][]=;mat[][]=;
mat[][]=;mat[][]=;mat[][]=;mat[][]=;
}
}M_hxl[],M_tom; Matrix Multiply(Matrix cur,Matrix now)
{
Matrix ww;
ww.ini();
for(LL i=;i<=;i++)
for(LL k=;k<=;k++)
if(cur.mat[i][k])
{
for(LL j=;j<=;j++)
if(now.mat[k][j])
{
ww.mat[i][j]+=cur.mat[i][k]*now.mat[k][j];
if(ww.mat[i][j]>=mod)
ww.mat[i][j]%=mod;
}
}
return ww;
} void power_sum2(LL n)
{
M_tom.first_ini();//!!
LL cnt=;
while(n)
{
if(n&)
{
M_tom=Multiply(M_hxl[cnt],M_tom);
}
n=n>>;
cnt++;//模拟二进制.
}
LL sum=;
sum=(sum+M_tom.mat[][]*)%mod;
sum=(sum+M_tom.mat[][]*)%mod;
sum=(sum+M_tom.mat[][]*)%mod;//!!!开始时没有加
sum=(sum+M_tom.mat[][]*)%mod;//!!!开始时没有加
printf("%I64d\n",sum);
} void pripare()
{
LL i;
M_hxl[].init();
for(i=;i<;i++)
M_hxl[i]=Multiply(M_hxl[i-],M_hxl[i-]);
} int main()
{
LL T,n,i;
pripare();//打表。
while(scanf("%I64d",&T)>)
{
for(i=;i<=T;i++)
{
scanf("%I64d",&n);
printf("Case %I64d: ",i);
if(n==)printf("1\n");
else if(n==) printf("4\n");
else if(n==) printf("9\n");
else
{
power_sum2(n-);
}
}
}
return ;
}
fuzhou 1683 纪念SlingShot ***的更多相关文章
- FOJ 1683 纪念SlingShot(矩阵快速幂)
C - 纪念SlingShot Description 已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5, ...
- FZU 1683 纪念SlingShot(矩阵水)
纪念SlingShot [题目链接]纪念SlingShot [题目类型]矩阵水 &题解: 这代码调了十多分钟,结果是Mul没返回值,好zz啊. 令sum(n)=sum(n-1)+f(n) 那么 ...
- 纪念SlingShot 矩阵
第一次独立做矩阵,只WA了一次,好高兴~~ 题意:已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给 ...
- Foj1683矩阵快速幂水题
Foj 1683 纪念SlingShot 题目链接:http://acm.fzu.edu.cn/problem.php?pid=1683 题目:已知 F(n)=3 * F(n-1)+2 * F(n-2 ...
- 魅族M8时期写过几个app,纪念一下曾经的自己
找工作的过程中也看了不少资料和文章,也学着别人弄弄博客,但发现自己临时的行为有点那啥吧..曾经我也写过不少东西,有过自己的一个技术论坛,为当时的魅族M8手机写过一个系列的技术帖子,但因为论坛被我关了, ...
- 分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
前面3个月的时间内,这些.NET开源项目你知道吗?系列文章已经发表了3篇,共计45个平时接触比较少,曾经默默无闻的.NET开源项目,展示给大家,当然不是每个人都能用得上,但也的确是有些人用了,反响还不 ...
- WP7 手机软件纪念 - 稍后读软件
在本月换机之际,决定写篇博客纪念一下我在 WP7 手机上开发的一个稍后读软件.这个工具开发完成后,两年间,我的 WP7 手机 80% 的用途,都发挥在了它身上. 这个软件其实是一个离线阅读工具,非常类 ...
- BZOJ AC800纪念
貌似没什么好纪念的...QAQQQ 好不容易水到了800还是记录一下好了....不过感觉水这么多题没有意义啊[思考熊] 然后就没有然后了恩 不过我到底是为什么才努力的呢...前途一阵迷茫,根本没有什么 ...
- 【特别推荐】10款唯美浪漫的婚礼 & 结婚纪念网站模板
互联网的重要性不言而喻,如今我们的生活已经完全离不开网络.这里给大家分享一组唯美浪漫的结婚邀请网站以及婚礼请柬网站模板,如果你也正想制作这样的网站,相信这些漂亮的网站模板能够带给你很大的帮助,让你快速 ...
随机推荐
- Java几个基本概念
To xj 编译:test.java->test.class反编译:test.class->test.java打jar包:test.class->test.jar打war包:test ...
- linux将指令加入开机启动或加入环境变量
以mongodb运行指令为例,/usr/local/webserver/mongodb/bin/mongo 1,linux将指令加入环境变量PATH 简单说PATH就是一组路径的字符串变量,当你输入的 ...
- 安装zlib的过程(Compression requires the (missing) zlib module)(Python2.6升级为2.7出现的问题)
觉得有必要把解决问题的过程写下来 1,因为要安装flask,所以安装pip,所以安装setuptools,所以安装zlib.(具体过程http://www.cnblogs.com/aiyr/p/726 ...
- Windows Server 2012 R2 部署DC及主辅DC
背景信息: 资源组:hlmdcn DC1:windows Server 2012 R2 Datacenter, A2, hlmdc1, 10.8.0.4DC2:windows Server 2012 ...
- C++类的构造函数及定义
定义一个普通的类时,一定要定义它自己的构造函数.原因有三:第一个原因是编译器只有在发现类不包含任何构造函数的情况下才会替我们生成一个默认的构造函数,一旦我们定义了一些其他的构造函数,那么除非我们再定义 ...
- Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】
一 题面 E. Minimum Array 二 分析 注意前提条件:$0 \le a_{i} \lt n$ 并且 $0 \le b_{i} \lt n$.那么,我们可以在$a_{i}$中任取一个数 ...
- LoginForm表单的执行过程
读取这篇文章,您将了解到 提前熟悉几个基础点 LoginForm表单的执行过程 首先我们看表单模型 声明验证规则 填充模型 触发验证 默认的用户密码加密 用户验证中使用Salt 数据验证 调试Yii ...
- IPC之AIDL&binder关系
binder是一个远程对象的基础类,核心部分是远程调用机制,这部分是由IBinder定义的.它是对IBinder类的实现,其中IBinder类提供这样一个类的标准的本地化实现方式. 大多数开发者不会去 ...
- Cloudera Manager安装之Cloudera Manager 5.3.X安装(三)(tar方式、rpm方式和yum方式)
不多说,直接上干货! 福利每天都有 => =>=>=>=> 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 ...
- Bunder: What does :require => nil in Gemfile mean?
https://stackoverflow.com/questions/12200215/bunder-what-does-require-nil-in-gemfile-mean Require ni ...