1002: [FJOI2007]轮状病毒

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 4746  Solved: 2597
[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

学习:2007周冬《生成树计数》 论文

题解:推公式,f[n] = 3*f[n-1] - f[n-2] + 2。高精度模拟

代码:

/**************************************************************Problem: 1002User: JstyleLanguage: C++Result: AcceptedTime:44 msMemory:1456 kb
****************************************************************/#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <bitset>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
#define rep(i,a,b) for(int (i) = (a);(i) <= (b);++ (i))
#define per(i,a,b) for(int (i) = (a);(i) >= (b);-- (i))
#define mem(a,b) memset((a),(b),sizeof((a)))
#define FIN freopen("in.txt","r",stdin)
#define FOUT freopen("out.txt","w",stdout)
#define IO ios_base::sync_with_stdio(0),cin.tie(0)
#define mid ((l+r)>>1)
#define ls (id<<1)
#define rs ((id<<1)|1)
#define N 100000+5
#define INF 0x3f3f3f3f
#define INFF 0x3f3f3f3f3f3f3f
typedef long long ll;
const ll mod = 20071027;
const ll eps = 1e-12;
using namespace std;const int MAXN = 410;  struct bign
{  int len, s[MAXN];  bign ()  {  memset(s, 0, sizeof(s));  len = 1;  }  bign (int num) { *this = num; }  bign (const char *num) { *this = num; }  bign operator = (const int num)  {  char s[MAXN];  sprintf(s, "%d", num);  *this = s;  return *this;  }  bign operator = (const char *num)  {  for(int i = 0; num[i] == '0'; num++) ;  //去前导0  len = strlen(num);  for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0';  return *this;  }  bign operator + (const bign &b) const //+  {  bign c;  c.len = 0;  for(int i = 0, g = 0; g || i < max(len, b.len); i++)  {  int x = g;  if(i < len) x += s[i];  if(i < b.len) x += b.s[i];  c.s[c.len++] = x % 10;  g = x / 10;  }  return c;  }  bign operator += (const bign &b)  {  *this = *this + b;  return *this;  }  void clean()  {  while(len > 1 && !s[len-1]) len--;  }  bign operator * (const bign &b) //*  {  bign c;  c.len = len + b.len;  for(int i = 0; i < len; i++)  {  for(int j = 0; j < b.len; j++)  {  c.s[i+j] += s[i] * b.s[j];  }  }  for(int i = 0; i < c.len; i++)  {  c.s[i+1] += c.s[i]/10;  c.s[i] %= 10;  }  c.clean();  return c;  }  bign operator *= (const bign &b)  {  *this = *this * b;  return *this;  }  bign operator - (const bign &b)  {  bign c;  c.len = 0;  for(int i = 0, g = 0; i < len; i++)  {  int x = s[i] - g;  if(i < b.len) x -= b.s[i];  if(x >= 0) g = 0;  else {  g = 1;  x += 10;  }  c.s[c.len++] = x;  }  c.clean();  return c;  }  bign operator -= (const bign &b)  {  *this = *this - b;  return *this;  }  bign operator / (const bign &b)  {  bign c, f = 0;  for(int i = len-1; i >= 0; i--)  {  f = f*10;  f.s[0] = s[i];  while(f >= b)  {  f -= b;  c.s[i]++;  }  }  c.len = len;  c.clean();  return c;  }  bign operator /= (const bign &b)  {  *this  = *this / b;  return *this;  }  bign operator % (const bign &b)  {  bign r = *this / b;  r = *this - r*b;  return r;  }  bign operator %= (const bign &b)  {  *this = *this % b;  return *this;  }  bool operator < (const bign &b)  {  if(len != b.len) return len < b.len;  for(int i = len-1; i >= 0; i--)  {  if(s[i] != b.s[i]) return s[i] < b.s[i];  }  return false;  }  bool operator > (const bign &b)  {  if(len != b.len) return len > b.len;  for(int i = len-1; i >= 0; i--)  {  if(s[i] != b.s[i]) return s[i] > b.s[i];  }  return false;  }  bool operator == (const bign &b)  {  return !(*this > b) && !(*this < b);  }  bool operator != (const bign &b)  {  return !(*this == b);  }  bool operator <= (const bign &b)  {  return *this < b || *this == b;  }  bool operator >= (const bign &b)  {  return *this > b || *this == b;  }  string str() const {  string res = "";  for(int i = 0; i < len; i++) res = char(s[i]+'0') + res;  return res;  }
};  istream& operator >> (istream &in, bign &x)
{  string s;  in >> s;  x = s.c_str();  return in;
}  ostream& operator << (ostream &out, const bign &x)
{  out << x.str();  return out;
}  int n;
bign dp[105];
void fuc(){bign a = "3",b = "2";dp[1] = "1";dp[2] = "5";rep(i, 3, 100)dp[i] = a*dp[i-1]-dp[i-2]+b;
}
int main()
{fuc();while(cin >> n)cout << dp[n] << endl;return 0;
}  

bzoj - 1002 【Kirchhoff矩阵】相关推荐

  1. BZOJ 1002 1003 1007 被屠记录

    为什么我不是一题一题写的呢..因为太弱了!某些题目就跳过去了. 主要跳过去的是数学题,Octgap201说过我有必杀技-----trigon对题目使用了 who cares 效果拔群! ....... ...

  2. 无向图生成树计数 -- Kirchhoff 矩阵法模板

    Kirchhoff 矩阵法是根据Matrix-Tree定理来的,本人太菜,没有那个心力去看证明了,知道是用就可以了 作用: 给定一个n个点m条边的无向图,求出这个图的生成树的总数. Matrix-Tr ...

  3. HDU 4305 Lightning (高斯消元解kirchhoff矩阵+逆元)

    题意是:给一些坐标点,如果两点之间的距离小于R,并且两点之间没有其他点,则这两个点保持连通,这样构成了一个图.问这个图中生成树的个数. 因为数据量并不大,O(N^3)的建图没有问题. 建好图以后就可以 ...

  4. [BZOJ 1002] [FJOI 2007] 轮状病毒

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3045  Solved: 1687 [Submit][Sta ...

  5. BZOJ-1002 轮状病毒 高精度加减+Kirchhoff矩阵数定理+递推

    1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3543 Solved: 1953 [Submit][Statu ...

  6. bzoj 1409 Password 矩阵快速幂+欧拉函数

    可以发现,该数组的mi就是斐波那契数列 所以要矩阵快速幂搞出第n位 但是斐波那契数列上涨的很快,这就需要欧拉定理了 p^phi(q)%q=1(gcd(p,q)==1) p是素数,所以可以用 然后需要5 ...

  7. BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec   Memory Limit: 256 MB Submit: 123   Solved: 73 [ Submit][ St ...

  8. 【BZOJ - 1059】矩阵游戏(二分图匹配,建图,最小边覆盖)

    题干: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换 ...

  9. BZOJ 3240 构造矩阵+矩阵快速幂

    思路: ax+b cx+d 构造矩阵+矩阵快速幂 (需要加各种特判,,,,我好像加少了- ) //By SiriusRen #include <cstdio> #include <c ...

最新文章

  1. red gate | sql CI
  2. oracle的delete语句加速,Oracle delete语句调优一例
  3. .NET Framework 3.5 SP1 bootstrapper 包(安装和部署)的解决方法
  4. 14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概
  5. 从点到线:逻辑回归到条件随机场
  6. 不同层次程序员的比较:三流比设计,一流比方法,顶级比什么?
  7. 找回密码forget_password
  8. MyBatis逆向工程生成代码(附源码)
  9. 通信原理 概念 笔记
  10. 数说海南——简单分析海南各市县近六年人口吸引力情况
  11. Java实现猜拳游戏
  12. LaTeX编写IEEE会议论文字体报错、且参考文献中会议/期刊的名字没有斜体的问题解决
  13. ASP.NET 入门基础--搭建网站开发环境
  14. oracle e18,ORACLE_10g_各版本下载地址大全
  15. [效率提升]webstorm配置Prettier
  16. 初探Kronecker product(克罗内克积)
  17. 白嫖几十款的微信红包封面
  18. 群晖NAS教程(二十一)、利用Docker安装DDNS动态域名解析,自动更新域名解析到公网IP(支持阿里云、腾讯云dnspod、Cloudflare、华为云)
  19. 数据查询(sql运算符)
  20. 推荐16个下载超酷脚本的免费热门网站

热门文章

  1. matlab单调谐无源滤波器元件,有源滤波器和无源滤波器的区别
  2. GrayScale灰度切量系统 【AB测试】
  3. C#、python企业微信群机器人自动发送文件
  4. vue状态管理——Vuex
  5. 物联网、智慧城市、增强现实(AR)与虚拟现实(VR)、区块链技术、语音识别、人工智能、数字汇流是大数据未来应用的七大发展方向
  6. 你终于下定决心,辞职开始创业,然后…
  7. 本领强大的计算机教案,四年级上信息技术教案本领高强的计算机广州版.doc
  8. 基础不扎实,工作中很迷茫。
  9. SRM系统排名,国内做srm系统的公司
  10. markdown编辑环境搭建