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

第一行是一整数m,代表总共有m个cases。

Output

对于每个case,输出一行。格式见样例,冒号后有一个空格。

Sample Input

2 3 6

Sample Output

Case 1: 37 Case 2: 313

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 ***的更多相关文章

  1. 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, ...

  2. FZU 1683 纪念SlingShot(矩阵水)

    纪念SlingShot [题目链接]纪念SlingShot [题目类型]矩阵水 &题解: 这代码调了十多分钟,结果是Mul没返回值,好zz啊. 令sum(n)=sum(n-1)+f(n) 那么 ...

  3. 纪念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,对于给 ...

  4. Foj1683矩阵快速幂水题

    Foj 1683 纪念SlingShot 题目链接:http://acm.fzu.edu.cn/problem.php?pid=1683 题目:已知 F(n)=3 * F(n-1)+2 * F(n-2 ...

  5. 魅族M8时期写过几个app,纪念一下曾经的自己

    找工作的过程中也看了不少资料和文章,也学着别人弄弄博客,但发现自己临时的行为有点那啥吧..曾经我也写过不少东西,有过自己的一个技术论坛,为当时的魅族M8手机写过一个系列的技术帖子,但因为论坛被我关了, ...

  6. 分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。

    前面3个月的时间内,这些.NET开源项目你知道吗?系列文章已经发表了3篇,共计45个平时接触比较少,曾经默默无闻的.NET开源项目,展示给大家,当然不是每个人都能用得上,但也的确是有些人用了,反响还不 ...

  7. WP7 手机软件纪念 - 稍后读软件

    在本月换机之际,决定写篇博客纪念一下我在 WP7 手机上开发的一个稍后读软件.这个工具开发完成后,两年间,我的 WP7 手机 80% 的用途,都发挥在了它身上. 这个软件其实是一个离线阅读工具,非常类 ...

  8. BZOJ AC800纪念

    貌似没什么好纪念的...QAQQQ 好不容易水到了800还是记录一下好了....不过感觉水这么多题没有意义啊[思考熊] 然后就没有然后了恩 不过我到底是为什么才努力的呢...前途一阵迷茫,根本没有什么 ...

  9. 【特别推荐】10款唯美浪漫的婚礼 & 结婚纪念网站模板

    互联网的重要性不言而喻,如今我们的生活已经完全离不开网络.这里给大家分享一组唯美浪漫的结婚邀请网站以及婚礼请柬网站模板,如果你也正想制作这样的网站,相信这些漂亮的网站模板能够带给你很大的帮助,让你快速 ...

随机推荐

  1. Centos7.4下安装Nginx

    一.下载Nginx Nginx下载地址:http://nginx.org/en/download.html Nginx是C语言开发的,建议在Linux上运行.由于Nginx的一些模块依赖一些lib,所 ...

  2. QuantLib 金融计算——数学工具之随机数发生器

    目录 QuantLib 金融计算--数学工具之随机数发生器 概述 伪随机数 正态分布(伪)随机数 拟随机数 HaltonRsg SobolRsg 两类随机数的收敛性比较 如果未做特别说明,文中的程序都 ...

  3. linux下线程的分离和结合属性

    在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是不释放的.相反, ...

  4. Tomcat和Mysql部署成Windows服务

    如题: Tomcat部署进入到Tomcat的bin目录,执行命令:service.bat install  [service_name]安装完毕后服务中能看见Apache Tomcat 7.0 [se ...

  5. Oracle数据库学习(一):虚拟机下Oracle Linux的安装与配置

    这篇博文主要以图片的形式讲述Oracle Linux在虚拟机下的安装与配置 一.前期虚拟机安装ISO文件的配置 1.创建新的虚拟机 2.选择“自定义(高级)”选项,下一步,默认“虚拟机硬件兼容性”或选 ...

  6. Python unittest第二篇:测试夹具

    关于测试夹具,我们知道,以类为对象的话,在python里对应的方法分别是test_isupper.test_upper, 那么以测试case为单位呢? 这时候,就要提到我们的setup()和tearD ...

  7. p1164 小A点菜 题解——背包初步

    传送门 除去花里胡哨的表层题干,其实可以简化为: 若有m个东西,每取一个要K个代价,问若要求取出数据的代价为n的方案数是多少 其实是01背包的一种变式(反正我就是这么认为的,不对又怎样,打我啊). 我 ...

  8. Universal-Image-Loader完全解析(下)

    Universal-Image-Loader完全解析(下) 在这篇文章中,我会继续跟大家分享有关于Universal-Image-Loader框架的相关知识,这次主要分享的是框架中图片缓存方面的知识. ...

  9. (转)OpenStack之服务端口号

    原文:https://blog.csdn.net/henulwj/article/details/47276391 在部署openstack的过程中,你会遇到配置各种服务的endpoint,opens ...

  10. C# virtual abstract

    virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能 ...