码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ_1002_[FJOI2007]_轮状病毒(递推+高精)

时间:2016-05-14 00:35:23      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

描述


http://www.lydsy.com/JudgeOnline/problem.php?id=1002

)*&*(^&*^&*^**()*)

 

分析


题目是求一种特殊的图的生成树的个数,但是貌似有更一般的算法,等明天再看吧...

只搞懂了打表找规律,然后题推的解法.

随便写个暴力打个表(其实我并不会写,明天再写吧今天好累),找一找规律.

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[100],cnt;
    int & operator [] (int id){
        return x[id];
    }
    void operator = (int y){
        x[1]=y;
        cnt=1;
    }
}f[100];
Big_Integer operator - (Big_Integer x,Big_Integer y){
    Big_Integer z=f[0];
    z.cnt=max(x.cnt,y.cnt);
    for(int i=1;i<=z.cnt;i++){
        z[i]+=x[i]-y[i];
        if(z[i]<0) z[i+1]--, z[i]+=10;
    }
    while(z.cnt&&!z[z.cnt]) z.cnt--;
    return z;
}
Big_Integer operator * (Big_Integer x,Big_Integer y){
    Big_Integer z=f[0];
    for(int i=1;i<=x.cnt;i++){
        for(int j=1;j<=y.cnt;j++){
            z[i+j-1]+=x[i]*y[j],z[i+j]+=z[i+j-1]/10,z[i+j-1]%=10;
        }
    }
    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[0];
    for(int i=1;i<=x.cnt;i++){
        z[i]+=x[i]*y,z[i+1]+=z[i]/10,z[i]%=10;
    }
    z.cnt=x.cnt;
    if(z[z.cnt+1]) 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[1]=1;
    f[2]=n&1?4:3;
    int last=n+1>>1;
    for(int i=3;i<=last;i++){
        f[i]=f[i-1]*3-f[i-2];
    }
    cout << f[last]*f[last]*(n&1?1:5) << endl;
    return 0;
}
View Code

 

 

BZOJ_1002_[FJOI2007]_轮状病毒(递推+高精)

标签:

原文地址:http://www.cnblogs.com/Sunnie69/p/5491627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!