首页 > 代码库 > BZOJ 4563 错排+高精度
BZOJ 4563 错排+高精度
思路:
把障碍移到对角线
就发现 这是个错位排列问题
用错排公式即可解
s[i]=(s[i-1]+s[i-2])*i
//By SiriusRen#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Bignum{ int a[1024],num; void init(){memset(a,0,sizeof(a));num=0;} friend Bignum operator+(Bignum a,Bignum b){ Bignum c;c.init(); for(int i=1;i<=max(a.num,b.num);i++) c.a[i]=a.a[i]+b.a[i]; for(int i=1;i<=a.num+b.num;i++){ c.a[i+1]+=c.a[i]/10,c.a[i]%=10; if(c.a[i])c.num=i; }return c; } friend Bignum operator*(Bignum a,Bignum b){ Bignum c;c.init(); for(int i=1;i<=a.num;i++) for(int j=1;j<=b.num;j++) c.a[i+j-1]+=a.a[i]*b.a[j]; for(int i=1;i<=a.num+b.num;i++){ c.a[i+1]+=c.a[i]/10,c.a[i]%=10; if(c.a[i])c.num=i; }return c; }}f[222],g;int main(){ int n; f[2].a[1]=f[2].num=g.num=1,g.a[1]=1; for(int i=3;i<=200;i++)g=g+f[2],f[i]=(f[i-1]+f[i-2])*g; scanf("%d",&n); for(int j=f[n].num;j;j--)printf("%d",f[n].a[j]);}
BZOJ 4563 错排+高精度
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。