日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[FJOI2007]轮状病毒

發布時間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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]轮状病毒的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。