Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 7125  Solved: 3878
[Submit][Status][Discuss]

Description

  轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示

  N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示

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

Input

  第一行有1个正整数n

Output

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

Sample Input

3

Sample Output

16

HINT

题解:基尔霍夫矩阵(我也不知道是什么)推出f[i]=(f[i-1]*3-f[i-2]+2);

代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<queue>
  6. #include<cstring>
  7. #define PAU putchar(' ')
  8. #define ENT putchar('\n')
  9. #define eps 1e-8
  10. using namespace std;
  11. const int maxn=;
  12. struct bign{
  13. int len,s[maxn];
  14. bign(){memset(s,,sizeof(s));len=;}
  15. bign(int num){*this=num;}
  16. bign(const char *num){*this=num;}
  17. bign operator = (const int num){
  18. char s[maxn]; sprintf(s,"%d",num);
  19. *this = s;return *this;
  20. }
  21. bign operator = (const char *num){
  22. for(int i=;num[i]=='';num++);
  23. len=strlen(num);
  24. for(int i=;i<len;i++) s[i]=num[len-i-]-'';
  25. return *this;
  26. }
  27. bign operator + (const bign &b) const{
  28. bign c;c.len=;
  29. for(int i=,g=;g||i<max(len,b.len);i++) {
  30. int x=g;
  31. if(i<len) x+=s[i];
  32. if(i<b.len) x+=b.s[i];
  33. c.s[c.len++]=x%;
  34. g=x/;
  35. } return c;
  36. }
  37. void clean(){while(len > && !s[len-]) len--;return;}
  38. bign operator * (const bign &b){
  39. bign c;
  40. c.len=len+b.len;
  41. for(int i=;i<len;i++) for(int j=;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];
  42. for(int i=;i<c.len;i++){
  43. c.s[i+]+=c.s[i]/;
  44. c.s[i]%=;
  45. } c.clean();return c;
  46. }
  47. bign operator - (const bign &b){
  48. bign c;c.len=;
  49. for(int i=,g=;i<len;i++){
  50. int x=s[i]-g;if(i<b.len) x-=b.s[i];
  51. if(x>=) g=;
  52. else g=,x+=;
  53. c.s[c.len++]=x;
  54. } c.clean();return c;
  55. }
  56. bign operator / (const bign &b) {
  57. bign c,f=;
  58. for(int i=len-;i>=;i--){
  59. f=f*;f.s[]=s[i];
  60. while(!(f<b)) f=f-b,c.s[i]++;
  61. } c.len=len;c.clean();return c;
  62. }
  63. bign operator % (const bign &b) {
  64. bign r = *this / b;
  65. r = *this - r*b;
  66. return r;
  67. }
  68. bool operator < (const bign &b) {
  69. if(len!=b.len) return len<b.len;
  70. for(int i=len-;i>=;i--){
  71. if(s[i]!=b.s[i]) return s[i]<b.s[i];
  72. } return false;
  73. }
  74. bool operator > (const bign &b){
  75. if(len!=b.len) return len>b.len;
  76. for(int i=len-;i>=;i--){
  77. if(s[i]!=b.s[i]) return s[i]>b.s[i];
  78. } return false;
  79. }
  80. bool operator == (const bign &b){
  81. return !(*this>b)&&!(*this<b);
  82. }
  83. bool operator >= (const bign &b){
  84. return (*this>b)||(*this==b);
  85. }
  86. void print(){
  87. for(int i=len-;i>=;i--) putchar(s[i]+'');return;
  88. }
  89. }f[maxn];
  90. inline int read(){
  91. int x=,sig=;char ch=getchar();
  92. while(!isdigit(ch)){if(ch=='-')sig=-;ch=getchar();}
  93. while(isdigit(ch))x=*x+ch-'',ch=getchar();
  94. return x*=sig;
  95. }
  96. inline void write(int x){
  97. if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
  98. int len=,buf[];while(x)buf[len++]=x%,x/=;
  99. for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
  100. }
  101. int n;
  102. void init(){
  103. n=read();f[]=;f[]=;
  104. return;
  105. }
  106. void work(){
  107. for(int i=;i<=n;i++) f[i]=f[i-]*-f[i-]+;
  108. return;
  109. }
  110. void print(){
  111. f[n].print();
  112. return;
  113. }
  114. int main(){init();work();print();}

BZOJ1002 [FJOI2007]轮状病毒(最小生成树计数)的更多相关文章

  1. bzoj1002: [FJOI2007]轮状病毒 生成树计数

    轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病毒的产生规 ...

  2. [bzoj1002][FJOI2007 轮状病毒] (生成树计数+递推+高精度)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  3. BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】

    BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...

  4. [bzoj1002][FJOI2007]轮状病毒_递推_高精度

    轮状病毒 bzoj-1002 FJOI-2007 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2 ...

  5. bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)

    1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...

  6. [BZOJ1002] [FJOI2007] 轮状病毒 (数学)

    Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...

  7. [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】

    题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...

  8. BZOJ1002[FJOI2007]轮状病毒

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  9. BZOJ1002:[FJOI2007]轮状病毒(找规律,递推)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

随机推荐

  1. 关于mysql驱动cj与不是cj的问题

    1. 带cj的是mysql驱动6.0以上的,不带的是6.0以下的. 2.6.0以上的需要注意有时区纠正

  2. Python连接SqlServer+GUI嵌入式——学生管理系统1.0

    学生管理系统1.0 1.建学生数据库 2.数据库嵌入高级语言(Python) 3.界面设计 简化思路: 1.先通过SqlServer2012建立学生数据库,包括账号.密码,姓名.选课等信息 2.运用P ...

  3. nyoj 27-水池数目(BFS, DFS)

    27-水池数目 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 南阳理工学院校园里有一些小河和一些湖泊,现在,我 ...

  4. nyoj 39-水仙花数

    39-水仙花数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:35 submit:70 题目描述: 请判断一个数是不是水仙花数. 其中水仙花数定义各 ...

  5. Javascript脚本语言

    找组件用 id (唯一) 2.name 样式 使用分类 1 页面中 2 建JS文件 可以放在head也可以在body 工作区可以有 1 全局变量 2 由多个函数构成 标签编辑器 onChange 改变 ...

  6. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  7. 2019-10-31:渗透测试,基础学习,mongodb注入学习

    mongodb命令删除文档,db.集合名.remove({键:值})更新文档,db.集合名.update({被更新的对象},{$set:{要更新的内容}}),默认只更新检测到的第一条文档更新全部匹配到 ...

  8. 小白学 Python 爬虫(10):Session 和 Cookies

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. vue 中使用 watch 的各种问题

    报错: Method "watch" has type "object" in the component definition. Did you refere ...

  10. linux命令之less命令

    一.我查看日志特别喜欢用less命令来查看,下面给大家讲解下使用. less(选项)(参数) 选项如下: -e:文件内容显示完毕后,自动退出: -f:强制显示文件: -g:不加亮显示搜索到的所有关键词 ...