[FJOI2007]轮状病毒
题目描述
轮状病毒有很多变种。许多轮状病毒都是由一个轮状基产生。一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成。2个原子之间的边表示这2个原子之间的信息通道,如图1。
n轮状病毒的产生规律是在n轮状基中删除若干边,使各原子之间有唯一一条信息通道。例如,共有16个不同的3轮状病毒,入图2所示。
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
输入输出格式
输入格式:
第一行有1个正整数n。
输出格式:
将编程计算出的不同的n轮状病毒数输出
输入输出样例
16
其实可以用矩阵树定理来算方案数
但是没有取模,高精是必需的
实际每个矩阵都是相似的
1 5 16 45 121 320
归纳找到规律:
f[i]=3*f[i-1]-f[i-2]+2
证明
还有DP和高精度矩阵树(太毒了找不到)的做法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct Num
{
int len;
int a[];
}f[];
int n;
Num chen(Num a,int k)
{
int i;
Num ans;
for (i=;i<=a.len;i++)
ans.a[i]=a.a[i]*k;
for (i=;i<=a.len;i++)
ans.a[i+]+=ans.a[i]/,ans.a[i]%=;
ans.len=a.len;
while (ans.a[ans.len+])
{
ans.len++;
ans.a[ans.len+]+=ans.a[ans.len]/;
ans.a[ans.len]%=;
}
return ans;
}
Num add(Num a,int k)
{
int i;
Num ans;
for (i=;i<=a.len;i++)
ans.a[i]=a.a[i];
ans.len=a.len;
ans.a[]+=k;
for (i=;i<=a.len;i++)
ans.a[i+]+=ans.a[i]/,ans.a[i]%=;
while (ans.a[ans.len+])
{
ans.len++;
ans.a[ans.len+]+=ans.a[ans.len]/;
ans.a[ans.len]%=;
}
return ans;
}
Num jian(Num a,Num b)
{
int i;
Num ans;
ans.len=a.len;
for (i=;i<=b.len;i++)
ans.a[i]=a.a[i]-b.a[i];
for (i=b.len+;i<=a.len;i++)
ans.a[i]=a.a[i];
for (i=;i<=a.len;i++)
{
if (ans.a[i]<) ans.a[i]+=,ans.a[i+]-=;
}
while (ans.a[ans.len]&&ans.len>) ans.len--;
return ans;
}
int main()
{int i,j;
cin>>n;
f[].a[]=;f[].len=;
f[].a[]=;f[].len=;
for (i=;i<=n;i++)
{
f[i]=chen(f[i-],);
f[i]=jian(f[i],f[i-]);
f[i]=add(f[i],);
}
for (i=f[n].len;i>=;i--)
printf("%d",f[n].a[i]);
}
[FJOI2007]轮状病毒的更多相关文章
- 【bzoj1002】[FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 4381 Solved: 2393[Submit][Statu ...
- 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
1002: [FJOI2007]轮状病毒 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同 ...
- bzoj 1002 [FJOI2007]轮状病毒 高精度&&找规律&&基尔霍夫矩阵
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2234 Solved: 1227[Submit][Statu ...
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3928 Solved: 2154[Submit][Statu ...
- BZOJ 1002 [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3106 Solved: 1724[Submit][Statu ...
- 1002: [FJOI2007]轮状病毒
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2609 Solved: 1450[Submit][Statu ...
- BZOJ 1002: [FJOI2007]轮状病毒【生成树的计数与基尔霍夫矩阵简单讲解+高精度】
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5577 Solved: 3031[Submit][Statu ...
- BZOJ [FJOI2007]轮状病毒 (找规律)
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6009 Solved: 3282[Submit][Statu ...
- 洛谷 P2144 [FJOI2007]轮状病毒
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个\(n\)轮状基由圆环上\(n\)个不同的基原子和圆心的一个核原子构成.\(2\)个原子之 ...
- 【洛谷】2144:[FJOI2007]轮状病毒【高精度】【数学推导??(找规律)】
P2144 [FJOI2007]轮状病毒 题目描述 轮状病毒有很多变种.许多轮状病毒都是由一个轮状基产生.一个n轮状基由圆环上n个不同的基原子和圆心的一个核原子构成.2个原子之间的边表示这2个原子之间 ...
随机推荐
- Eclipse配置类似sublime的黑色主题
另一篇中,详细介绍了如何使用Eclipse+Pydev搭建Python环境,传送门:http://www.cnblogs.com/BH8ANK/p/8688110.html 下面介绍下如何在Eclip ...
- MySQL之集合函数与分组查询
这是分组查询用到的语句,也包括了排序以及常用的集合函数
- C语言第三次作业--嵌套循环
一.PTA实验作业 题目1:硬币数 1. 本题PTA提交列表 2. 设计思路 步骤一:定义整型变量fen5,fen2,fen1,表示1分2分和5分,零钱数额x,总硬币数total,换法count 步骤 ...
- c语言博客作业-指针
一.PTA实验作业 题目1: 1. 本题PTA提交列表 2. 设计思路(用代码表示扣分) 定义整型变量i,count记录平均分,实型变量sum保存总分 for i=0 to n sum = sum+* ...
- Bate敏捷冲刺每日报告--day2
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- 0基础菜鸟学前端之Vue.js
简介:0基础前端菜鸟,啃了将近半月前端VUE框架,对前端知识有了初步的了解.下面总结一下这段时间的学习心得. 文章结构 前端基础 Vue.js简介 Vue.js常用指令 Vue.js组件 Vue.js ...
- JAVA_SE基础——7.常量&变量
上一篇,我讲了标识符&关键字 这篇我来解释下变量&常量~~~ 变量与常量这两个概念相信大家都不会感到陌生,在数学中就已经涉及了变量与常量.理解变量与常量,可以举这样一个例子: 例 ...
- python 学习笔记
1. 关于两者详细解释,参考链接:www.crifan.com/python_re_search_vs_re_findall/ 代码图
- Ubuntu命令行连接WPA/WPA2无线网线
一,连接无加密无线网络zhang:sudo ip link set wlan0 up sudo iw dev wlan0 connect zhangsudo dhclient wlan0 二,连接WP ...
- Linq 集合操作符 Except,Intersect,Union
IList<string> s1 = new List<string>() { "One", "Two", "Three&qu ...