1002: [FJOI2007]轮状病毒

Time Limit: 1 Sec Memory Limit: 162 MB

Submit: 3543 Solved: 1953

[Submit][Status][Discuss]

Description

给定n(N<=100),编程计算有多少个不同的n轮状病毒。

Input

第一行有1个正整数n。

Output

将编程计算出的不同的n轮状病毒数输出

Sample Input

3

Sample Output

16

HINT

基尔霍夫矩阵Matrix-Tree定理,最小生成树数种类数,具体的参见此讲解:http://www.bubuko.com/infodetail-899543.html

对于本题的作用是用此方法模拟出前几组种类数,然后找递推式,加高精度答案即可

递推式为:F【n】=F【n-1】*3-F【n-2】+2

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; struct data{
int num[100];
};
data s0,s1,s2,s3;
int n;//s1表示f【n-2】,s2表示f【n-1】,s3记录答案,s0为常数2 data add(data x,data y)
{
int len=max(x.num[0],y.num[0]);
data z;
int jw=0;
for (int i=1; i<=len; i++)
{
z.num[i]=(jw+x.num[i]+y.num[i])%10;
jw=(jw+x.num[i]+y.num[i])/10;
}
if (jw!=0) z.num[++len]=jw;
z.num[0]=len;
return z;
}//高精度加法 data sub(data x,data y)
{
int len=max(x.num[0],y.num[0]);
data z;
for (int i=1; i<=len; i++)
z.num[i]=x.num[i]-y.num[i];
for (int i=1; i<=len; i++)
if (z.num[i]<0) {z.num[i]+=10;z.num[i+1]--;}
while (z.num[len]==0)
{len--;}
z.num[0]=len;
return z;
}//高精度减法 int main()
{
scanf("%d",&n);
if (n==1) {printf("1"); return 0;}
if (n==2) {printf("5"); return 0;}
s1.num[1]=1;
s2.num[1]=5;
s1.num[0]=s2.num[0]=1;
s0.num[0]=1;s0.num[1]=2;
for (int i=3; i<=n; i++)
{
s3=add(sub(add(s2,add(s2,s2)),s1),s0);
s1=s2;s2=s3;
}
for (int i=s3.num[0]; i>=1; i--)
printf("%d",s3.num[i]);
return 0;
}

BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推的更多相关文章

  1. BZOJ 1002 轮状病毒 (基尔霍夫矩阵)

    题解:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/ #include <iostream> #inc ...

  2. HDU 5863 cjj's string game (矩阵乘法优化递推)

    题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), ...

  3. BZOJ 1002 轮状病毒 矩阵树定理

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1002 题目大意: 给定n(N<=100),编程计算有多少个不同的n轮状病毒 思路 ...

  4. BZOJ 2467: [中山市选2010]生成树(矩阵树定理+取模高斯消元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2467 题意: 思路:要用矩阵树定理不难,但是这里的话需要取模,所以是需要计算逆元的,但是用辗转相减会 ...

  5. [模板][题解][Luogu1939]矩阵乘法加速递推(详解)

    题目传送门 题目大意:计算数列a的第n项,其中: \[a[1] = a[2] = a[3] = 1\] \[a[i] = a[i-3] + a[i - 1]\] \[(n ≤ 2 \times 10^ ...

  6. ZZNU 2182 矩阵dp (矩阵快速幂+递推式 || 杜教BM)

    题目链接:http://47.93.249.116/problem.php?id=2182 题目描述 河神喜欢吃零食,有三种最喜欢的零食,鱼干,猪肉脯,巧克力.他每小时会选择一种吃一包. 不幸的是,医 ...

  7. hdu 5171(矩阵快速幂,递推)

    GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. hdu 2842(矩阵高速幂+递推)

    题意:一个中国环的游戏,规则是一个木棒上有n个环.第一个环是能够任意放上或拆下的,剩下的环x假设想放上或拆下必须前一个环x-1是放上的且前x-2个环所有是拆下的,问n个环最少多少次操作能够所有拆掉. ...

  9. HDU2604:Queuing(矩阵快速幂+递推)

    传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...

随机推荐

  1. WWW压缩解压缩

    unity的WWW参考文档:http://game.ceeger.com/Script/WWW/WWW.html 在unity中把资源打包成Assetbundle其实把资源通过 LZMA 压缩成二进制 ...

  2. Visio使用遇到的问题

    1.UML Background Add-on --------------------------- 此 UML 形状所在的绘图页不是 UML 模型图的一部分. 该形状设计用于利用 UML 模型图模 ...

  3. Jython概要

    1.安装jython 1.1 进入http://www.jython.org/downloads.html ,网页上会显示当前最稳定的版本(The most current stable releas ...

  4. vuejs常用指令

    v-model 表单双向绑定 v-for="文件名 in 向文件添加内容的文件名" 渲染列表(内容) 将中间的in可改写成of v-on:click="name" ...

  5. 如何将list转为json?

  6. Node.js开发环境搭建

    1.安装express npm install express -g 2.express33.6以后把express-generator分离出来了,所以还需安装express-generator,否则 ...

  7. C语言 百炼成钢4

    //题目10:打印楼梯,同时在楼梯上方打印两个笑脸. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdli ...

  8. 基于React Native的Material Design风格的组件库 MRN

    基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://git ...

  9. linux内核分析 第4章读书笔记

    第四章 进程调度 一.抢占与非抢占 1.非抢占式进程调度 进程会一直执行直到自己主动停止运行 2.抢占式进程调度 Linux/Unix使用的是抢占式的方式,强制的挂起进程的动作就叫做抢占. 二.进程优 ...

  10. VmWare Workstation 10 安装 Ubuntu 14.04 问题解决

    Ubuntu安装过程很顺利,安装完成后还是有小问题存在   问题1:无法联网,PING可以通,网址无法解析 原因:默认DNS设置不正确 解决:设置DNS地址为8.8.8.8,问题解决   问题2:vm ...