题目信息:

1471: Jiulianhuan

时间限制: 1 Sec  内存限制: 128 MB
提交: 95  解决: 22

题目描述

  For each data set in the input print on a separate line, on the standa  I think that you might have played the traditional Chinese ring game: The Chinese Linking Rings (here we call its nickname Jiulianhuan —— “九连环”). Well, you
say you haven’t played it before? Then you must have seen it before, right? If not seen, come to borrow mine to have a good look at it and enjoy it!d output, the integer that represents the maximal amount of overtaking.

Now, I would like to mention the rules or common sense of Jiulianhuan again.
1) The first ring can put on or down the handles at any time. That is, when the first ring is under the handle, it can climb up the handle within one step, and vice versa.
2) At any moment, you can only operate one ring, on the condition that the ring is operable.
3) If the first k-2 rings are under the handle, and the (k-1)th ring is on the handle, then if the k-th ring is under the handle, you can put it on the handle, and if it is not under the handle, you can put it down the handle.
Seems complicated? But I tried my simplest explanation to you, and I hope its not hard for you to understand. Maybe you have played the game before,  and the above is what actually a “step” means in the game.

输入

  Given n (not bigger than 10^8), you are to output the minimum steps it needs to down n well-put rings. There are no more than 100 test cases.

输出

  A number a line. Because the number are so huge ,you are to output the result after it mod prime 10007.

样例输入

1
2
9
1005

样例输出

1
2
341
4260

提示

/*
由题意可推知:
a(1)=1;
a(2)=2;
a(3)=5;
a(4)=10;
a(n) = a(n-1)+2*a(n-2)+1;
求得通项公式:
    a(1) = 1;
    a(2) = 2;
    奇数:a(n) = a1+3/4*(2^(n-1)-1);
    偶数:a(n) = a2+3/8*(2^(n-2)-1);

*/
三种方法实现该题:
/*********************************************************************/
 //直接用通项公式求答案
#include "stdio.h"
#include "string.h"
#define MOD 10007
#define MOD_D 30021 int mypow(int a,int n) //快速幂
{
int y;
if(n==)
return ;
y = mypow(a,n/);
y = (y*y)%MOD_D;
if(n%==)
y *= a;
return y%MOD_D;
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==) { printf("1\n"); continue; }
if(n==) { printf("2\n"); continue; }
if(n%==)
printf("%d\n",(+(*((mypow(,n-)-)%MOD_D)/)%MOD)%MOD);
else
printf("%d\n",(+(*((mypow(,n-)-)%MOD_D)/)%MOD)%MOD);
}
return ;
} /***********************************************************************/
//找循环节
#include "stdio.h"
#include "string.h" #define N 1000007
#define MOD 10007
int p[N] = {,,,}; int main()
{
int n;
for(n=; n<=N; ++n)
{
p[n] = (p[n-] + *p[n-] + )%MOD;
if(p[n]==p[] && p[n-]==p[])
break;
}
int k = n-;
while(scanf("%d",&n)!=EOF)
{
n = (n-)%k+;
printf("%d\n",p[n]);
}
return ;
} /******************************************************************/
//矩阵快速幂算法
#include "stdio.h"
#include "string.h"
#define MOD 10007 struct Matrix
{
int n,m;
int a[][];
}p0; Matrix Mult_mod(Matrix a,Matrix b)
{
Matrix c;
c.n = a.n;
c.m = b.m;
int i,j,k;
for(i=; i<a.n; ++i)
{
for(j=; j<a.m; ++j)
{
c.a[i][j] = ;
for(k=; k<a.m; ++k)
c.a[i][j] += (a.a[i][k]*b.a[k][j])%MOD;
}
}
return c;
} Matrix power_mod(Matrix a,int n)
{
if(n==)
return p0;
Matrix y = power_mod(a,n/);
y = Mult_mod(y,y);
if(n%==)
y = Mult_mod(y,p0);
return y;
} int main()
{
int n;
memset(p0.a,,sizeof(p0.a));
p0.n = ;
p0.m = ;
p0.a[][] = ;
p0.a[][] = ;
p0.a[][] = ;
p0.a[][] = ;
p0.a[][] = ;
Matrix ans;
while(scanf("%d",&n)!=EOF)
{
if(n==) printf("1\n");
else if(n==) printf("2\n");
else
{
ans = power_mod(p0,n-);
printf("%d\n",(*ans.a[][]+ans.a[][]+ans.a[][])%MOD);
} }
return ;
}

jiulianhuan 快速幂--矩阵快速幂的更多相关文章

  1. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  2. 快速幂 & 矩阵快速幂

    目录 快速幂 实数快速幂 矩阵快速幂 快速幂 实数快速幂 普通求幂的方法为 O(n) .在一些要求比较严格的题目上很有可能会超时.所以下面来介绍一下快速幂. 快速幂的思想其实是将数分解,即a^b可以分 ...

  3. 【数论】 快速幂&&矩阵快速幂

    首先复习快速幂 #include<bits/stdc++.h> using namespace std; long long power(long long a,long long b,l ...

  4. 整数快速乘法/快速幂+矩阵快速幂+Strassen算法

    快速幂算法可以说是ACM一类竞赛中必不可少,并且也是非常基础的一类算法,鉴于我一直学的比较零散,所以今天用这个帖子总结一下 快速乘法通常有两类应用:一.整数的运算,计算(a*b) mod c  二.矩 ...

  5. 快速幂&&矩阵快速幂

    快速幂 题目链接:https://www.luogu.org/problemnew/show/P1226 快速幂用了二分的思想,即将\(a^{b}\)的指数b不断分解成二进制的形式,然后相乘累加起来, ...

  6. [板子]快速幂&矩阵快速幂

    不会的来这看:https://www.cnblogs.com/CXCXCXC/p/4641812.html 简单的一说:当转换为二进制的时候有位运算这种黑科技,&相当于%2判断奇偶性. x&a ...

  7. hdu 4549 M斐波那契数列(快速幂 矩阵快速幂 费马小定理)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4549: 题目是中文的很容易理解吧.可一开始我把题目看错了,这毛病哈哈. 一开始我看错题时,就用了一个快速 ...

  8. 矩阵快速幂模板(pascal)

    洛谷P3390 题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格 ...

  9. 培训补坑(day10:双指针扫描+矩阵快速幂)

    这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...

随机推荐

  1. csharp:正则表达式采集网页数据

    https://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex(v=vs.110).aspx https:/ ...

  2. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  3. Angularjs,WebAPI 搭建一个简易权限管理系统 —— 系统业务与实现(三)

    目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 系统业务与实现(二) 上一章我们讲解的 Angu ...

  4. [vim] vim入门

    1. 概述 工欲善其事 必先利其器.vim是非常好用的文本编辑器,可以将它看作是vi的进阶.绝大多数Unix系统都会内置vi编辑器,vi是文本编辑器,vim是程序编辑器.相比vi,它可以根据文件的类型 ...

  5. [.NET] 使用C#开发SQL Function来提供数据 - 天气预报

    [.NET] 使用C#开发SQL Function来提供数据 - 天气预报 范例下载 范例程序代码:点此下载 问题情景 开发人员在设计一些数据汇整的系统服务时,可能会选择WCF.WebAPI.Sign ...

  6. html5 大幅度地增加和改良input元素的种类

    增加和改良input元素 url类型.email类型.date类型.time类型.datetime类型.datetime-local类型.month类型.week类型.number类型.range类型 ...

  7. RHEL7文件权限

    本文介绍Linux下的文件权限 操作系统为RHEL7.2_X86_64 可以从以下三种访问方式限制访问权限: 1 只允许用户自己访问 2 允许一个预先指定的用户组中的用户访问 3 允许系统中的任何用户 ...

  8. How does Web Analytics works under sharePoint 2010

    [http://gokanx.wordpress.com/2013/06/15/how-does-web-analytics-works-under-sharepoint-2010/] You nee ...

  9. Windows 下Apace tomcat

    java JDK安装: 1. 官方www.oracle.com 下载jdk 2. 环境变量配置 (1)新建->变量名:JAVA_HOME变量值:C:\Program Files (x86)\Ja ...

  10. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q57-Q59)

    Question 57You update a solution validator.You need to ensure that all SharePoint solutions are vali ...