描述


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. ASP.NET问题处理---“数据请求超时错误“”

    数据请求超时,一般有2中解决方式: 1.页面AJAX处理数据时延长时间: 2.后台数据库连接取数据时延长时间. 由于我的后台数据库连接取数据为循环读取数据,所以不存在超时问题,这里具体说说如何修改AJ ...

  2. PeekMessage

    PeekMessage是一个Windows API函数.该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构. 1 语法 BOOL PeekMessage( LPMSG IpMsg, ...

  3. oracle linux下oracle 10g启动EM、isqlplus及相关命令语法

    转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOM ...

  4. 解决 cocoapods diff: /../Podfile.lock: No such file or directory 问题

    解决cocoapods diff: /../Podfile.lock: No such file or directory google一圈之后,找到两个解决方案: 方案一:
 关闭Xcode,重新执 ...

  5. swift-01-利用元组判断字符串出现次数

    //问题的提出:有一个字符串 array = ["1","2","4","4","2"," ...

  6. java新手笔记20 抽象类模板(letter)

    1.抽象类 package com.yfs.javase; //信模板 public abstract class Templater { public abstract String toName( ...

  7. 使用 Virtual Box 安装 android x86

    1.安装 跟随别人的教程:http://www.maketecheasier.com/run-android-4-3-in-virtualbox/ 2.问题 安装过程出现以下问题:Kernel pan ...

  8. session绑定线程

  9. erlang 里的if 和 case

    case Expression of Pattern1 [when Guard1] -> Expr_seq1; Pattern2 [when Guard2] -> Expr_seq2; … ...

  10. uboot下 Nand flash 启动 内核与根文件系统

    u-boot版本: u-boot-2010.03_tekkamanninja修改的u-boot 1.将uboot通过j-link烧写到norflash,启动后 saveenv 将参数保存到 nandf ...