生活随笔
收集整理的這篇文章主要介紹了
[FJOI2007]轮状病毒
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
輪狀病毒有很多變種,所有輪狀病毒的變種都是從一個輪狀基產生的。一個N輪狀基由圓環上N個不同的基原子和圓心處一個核原子構成的,2個原子之間的邊表示這2個原子之間的信息通道。如下圖所示
N輪狀病毒的產生規律是在一個N輪狀基中刪去若干條邊,使得各原子之間有唯一的信息通道,例如共有16個不同的3輪狀病毒,如下圖所示
現給定n(N<=100),編程計算有多少個不同的n輪狀病毒
Input
第一行有1個正整數n
Output
計算出的不同的n輪狀病毒數輸出
Sample Input
3
Sample Output
16
基爾霍夫矩陣??貌似是的,但是我不會……
所以,打表出奇跡!
我們通過耗費大量的時間手動推出前8個輪狀病毒的個數
1,5,16,45,121,320,841,2205,...
然后,找規律!
通過數學知識與大膽猜想,我們推出遞推式為\(f[i]=3\times f[i-1]-f[i-2]+2\)
大膽交一發,WA掉……遞推式錯了?不,沒開高精度……
加上高精度這題就可以愉快的A掉啦~
/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10) print(x/10);putchar(x%10+'0');
}
const int base=1e4;
const int digit=4;
const int maxn=15;
const int N=1e2;
struct Bignum{int v[maxn],len;Bignum(){memset(v,0,sizeof(v)),len=1;}void write(){printf("%d",v[len-1]);for (int i=len-2;~i;i--) printf("%0*d",digit,v[i]);putchar('\n');}
}f[N+10];
Bignum operator +(const Bignum &x,const int &y){Bignum z;z.len=x.len; z.v[0]=y;for (int i=0;i<=z.len;i++) z.v[i]+=x.v[i],z.v[i+1]+=z.v[i]/base,z.v[i]%=base;while (z.v[z.len]) z.v[z.len+1]=z.v[z.len]/base,z.v[z.len]%=base,z.len++;return z;
}
Bignum operator -(const Bignum &x,const Bignum &y){Bignum z;z.len=x.len;for (int i=0;i<=z.len;i++){z.v[i]+=x.v[i]-y.v[i];if (z.v[i]<0) z.v[i+1]--,z.v[i]+=base;}while (!z.v[z.len-1]&&z.len>1) z.len--;return z;
}
Bignum operator *(const Bignum &x,const int &y){Bignum z;z.len=x.len;for (int i=0;i<=z.len;i++) z.v[i]+=x.v[i]*y,z.v[i+1]+=z.v[i]/base,z.v[i]%=base;while (z.v[z.len]) z.v[z.len+1]=z.v[z.len]/base,z.v[z.len]%=base,z.len++;return z;
}
int main(){int n=read();f[1].v[0]=1;for (int i=2;i<=n;i++) f[i]=f[i-1]*3-f[i-2]+2;f[n].write();return 0;
}
轉載于:https://www.cnblogs.com/Wolfycz/p/9141910.html
總結
以上是生活随笔為你收集整理的[FJOI2007]轮状病毒的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。