轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示
.png)
N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示
.png)
现给定n(N<=100),编程计算有多少个不同的n轮状病毒
标签:== leak turn 基尔霍夫矩阵 style href static 一个 圆心
轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示
N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示
第一行有1个正整数n
计算出的不同的n轮状病毒数输出
看来这种题也能有多种做法啊。
高精度模板如下(+、-、*):
1 const int BASE=100000000; 2 struct NUM {int aa[100], len;}; 3 NUM plu(struct NUM x,int k) { 4 x.aa[1]+=k; 5 for( int j = 1; x.aa[j]>=BASE; j++ ) x.aa[j]%=BASE, x.aa[j+1]++; 6 return x; 7 } 8 NUM mul(struct NUM x,int k) { 9 for( int i = 1; i <= x.len; i++ ) x.aa[i]*=k; 10 for( int i = 1; i <= x.len; i++ ) { 11 x.aa[i+1]+=x.aa[i]/BASE; 12 x.aa[i]%=BASE; 13 } 14 if(x.aa[x.len+1]) x.len++; 15 return x; 16 } 17 NUM sub(struct NUM x,struct NUM y) { 18 for( int i = 1; i <= x.len; i++ ) { 19 x.aa[i]-=y.aa[i]; 20 if(x.aa[i]<0) x.aa[i]+=BASE, x.aa[i+1]--; 21 } 22 while(x.aa[x.len]==0) x.len--; 23 return x; 24 }
标签:== leak turn 基尔霍夫矩阵 style href static 一个 圆心
原文地址:http://www.cnblogs.com/Doggu/p/bzoj1002.html