描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1002

)*&*(^&*^&*^**()*)

1002: [FJOI2007]轮状病毒

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

Source

分析


题目是求一种特殊的图的生成树的个数,但是貌似有更一般的算法,等明天再看吧...

只搞懂了打表找规律,然后题推的解法.

随便写个暴力打个表(其实我并不会写,明天再写吧今天好累),找一找规律.

1~14的答案如下

1 5 16 45 121 320 841 2205 5776 15125 39601 103680 271441 710645
奇数项
1 16 121 841 5776 39601 271441
开根号得
1 4 11 29 76 199 521
a[i]=a[i-1]*3-a[i-2]
偶数项
5 45 320 2205 15125 103680 710645
除以5得
1 9 64 441 3025 20736 142129
开根号得
1 3 8 21 55 144 377
a[i]=a[i-1]*3-a[i-2]

注意要用高精(学习了别人的高精写法,自己写得太小学生了)

 #include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct Big_Integer{
int x[],cnt;
int & operator [] (int id){
return x[id];
}
void operator = (int y){
x[]=y;
cnt=;
}
}f[];
Big_Integer operator - (Big_Integer x,Big_Integer y){
Big_Integer z=f[];
z.cnt=max(x.cnt,y.cnt);
for(int i=;i<=z.cnt;i++){
z[i]+=x[i]-y[i];
if(z[i]<) z[i+]--, z[i]+=;
}
while(z.cnt&&!z[z.cnt]) z.cnt--;
return z;
}
Big_Integer operator * (Big_Integer x,Big_Integer y){
Big_Integer z=f[];
for(int i=;i<=x.cnt;i++){
for(int j=;j<=y.cnt;j++){
z[i+j-]+=x[i]*y[j],z[i+j]+=z[i+j-]/,z[i+j-]%=;
}
}
z.cnt=x.cnt+y.cnt;
if(!z[z.cnt]) z.cnt--;
return z;
}
Big_Integer operator * (Big_Integer x,int y){
Big_Integer z=f[];
for(int i=;i<=x.cnt;i++){
z[i]+=x[i]*y,z[i+]+=z[i]/,z[i]%=;
}
z.cnt=x.cnt;
if(z[z.cnt+]) z.cnt++;
return z;
}
ostream& operator << (ostream &out,Big_Integer x){
for(int i=x.cnt;i;i--){
out << x[i];
}
return out;
}
int n;
int main(){
cin >> n;
f[]=;
f[]=n&?:;
int last=n+>>;
for(int i=;i<=last;i++){
f[i]=f[i-]*-f[i-];
}
cout << f[last]*f[last]*(n&?:) << endl;
return ;
}

BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)的更多相关文章

  1. HDU - 5686-Problem B (递推+高精)

    度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列. Input 这里包括多组测 ...

  2. FJOI2007轮状病毒 行列式递推详细证明

    题目链接 题目给了你一个奇怪的图,让你求它的生成树个数. 开始写了一个矩阵树: #include<cstdio> #include<cstdlib> #include<c ...

  3. BZOJ1002 [FJOI2007] 轮状病毒 【递推】

    题目分析: 推基尔霍夫矩阵后可以发现递推式 代码: n = input() f0 = 1 f1 = 5 f3 = 0 if n == 1: print f0 elif n == 2: print f1 ...

  4. BZOJ 1002 FJOI2007 轮状病毒 递推+高精度

    题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring& ...

  5. BZOJ_1925_[Sdoi2010]地精部落_递推

    BZOJ_1925_[Sdoi2010]地精部落_递推 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 ...

  6. 【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度

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

  7. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  8. [bzoj1925][Sdoi2010]地精部落_递推_动态规划

    地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 注释:$1\le ...

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

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

随机推荐

  1. struts2自定义类型转换器

    首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...

  2. JS Attribute属性操作

    Attribute是属性的意思,文章仅对部分兼容IE和FF的Attribute相关的介绍. attributes:获取一个属性作为对象 getAttribute:获取某一个属性的值setAttribu ...

  3. javascript面向对象程序设计系列(一)---创建对象

    javascript是一种基于对象的语言,但它没有类的概念,所以又和实际面向对象的语言有区别,面向对象是javascript中的难点之一.现在就我所理解的总结一下,便于以后复习: 一.创建对象 1.创 ...

  4. linux命令之解压与压缩

    解压 tar –xvf file.tar //解压 tar包 tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 ...

  5. Linux错误码的含义

    C Name Value Description EPERM 1 Operation not permitted ENOENT 2 No such file or directory ESRCH 3 ...

  6. Unix环境高级编程学习笔记——dup

    dup 和 dup2   dup和dup2,都是用来将一个文件描述符复制给另一个文件描述符上,这两个文件描述符都指向同一个文件状态标志上. 只是文件描述符的大小不一样,dup所执行下的复制,肯定是返回 ...

  7. 【原创】Linux 内核模块编程

    sudo gedit hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linu ...

  8. javascript 写状态模式

    写了状态模式的切换,以及分支循环.but 怎么实现子状态嵌套呢? /** * by JackChen 2016-3-26 11.51.20 * * 状态模式: * 一个状态到另一个状态的变换.其实可以 ...

  9. xml技术基础

    HTML语言缺点 :  1.标签规定好,用户不能自定义 2.标签显示样式和数据绑定在一起,数据不可复用           3.html标签没有任何含义 XML语言(Extensible Markup ...

  10. linux安装ruby ruby-devel rubygems bundler

    linux安装ruby ruby-devel rubygems yum install ruby ruby-devel rubygems 安装bundler gem install bundleror ...