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. 初探APT 攻击

    作者:joe       所属团队:Arctic Shell 本文编写参考: https://www.freebuf.com/vuls/175280.html https://www.freebuf. ...

  2. jmeter服务器监控插件下载配置

    jmeter想要监控服务器CPU.内存.磁盘.网络等相关资源需要借助plugins插件 下载jmeter性能监控插件 1.下载jmeterPlugins-Standard和jmeterPlugins- ...

  3. jquery插件制作,下拉菜单

    要求输入框点击出现下拉菜单,并实现以下功能: 1.首先点击地点标签页,选择好地点: 2.自动显示相应节点标签页显示节点信息,选择好节点 3.自动显示相应的连接点,选择连接点,连接点被选中并被传送的输入 ...

  4. css左右布局,左侧固定,右侧自适应

    实现布局的几种方法,见代码: <!DOCTYPE html> <html lang="cn"> <head> <meta charset= ...

  5. MarkDown添加图片的三种方式

    插图最基础的格式就是: ![Alt text](图片链接 "optional title") Alt text:图片的Alt标签,用来描述图片的关键词,可以不写.最初的本意是当图片 ...

  6. C# 并发队列ConcurrentQueue

    测试函数 static async Task RunProgram() { var taskQueue = new ConcurrentQueue<CustomTask>(); var c ...

  7. PS2模拟器 PCSX2 新手向

    1.模拟器的下载 1.1百度网盘地址:http://pan.baidu.com/s/1i3kt7bJ (已经整合了PS2BIOS的模拟器下载,比较新的版本,适合新手) 1.2高端玩家可以下载: 官网g ...

  8. [转] Actor生命周期理解

    [转] https://blog.csdn.net/wsscy2004/article/details/38875065 镇图:Actor内功心法图 Actor的生命周期可以用Hooks体现和控制,下 ...

  9. python实现RSA加密解密方法

    python3.5 安装pip 安装rsa python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 # -*- coding: utf-8 ...

  10. Mac版sublime text右键open in browser 不能识别中文名解决办法

    问题描述: Mac下sublime text下打开中文命名的html文件,右键open in browser,浏览器无反应. 解决思路: 要么适应软件,要么改进软件来适应. 1.  将中文名的html ...