• bzoj 1002: [FJOI2007]轮状病毒


    想了好久没想出来。

    查了下题解是有递推式。

    f[i]=3*f[i-1]-f[i-2]+2(p.s.至今还不明觉厉)

    然后就是高精了。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<functional>
     7 #include<cmath>
     8 #include<cctype>
     9 using namespace std;
    10 #define For(i,n) for(int i=1;i<=n;i++)
    11 #define Rep(i,n) for(int i=0;i<n;i++)
    12 #define Fork(i,k,n) for(int i=k;i<=n;i++)
    13 #define ForD(i,n) for(int i=n;i;i--)
    14 #define Forp(x) for(int p=pre[x];p;p=next[p])
    15 #define RepD(i,n) for(int i=n;i>=0;i--)
    16 #define MAXN (100+10)
    17 #define F (10000)
    18 int n;
    19 struct Highn
    20 {
    21     int a[10000],len;
    22     Highn(){len=0;memset(a,0,sizeof(a));}
    23     Highn(int b)
    24     {
    25         len=0;memset(a,0,sizeof(a));
    26         while (b) a[++len]=b%F,b/=F;
    27         if (len==0) len=1;
    28     }
    29     friend Highn operator*(int b,Highn a)
    30     {
    31         For(i,a.len) a.a[i]*=b;
    32         For(i,a.len) a.a[i+1]+=a.a[i]/F,a.a[i]%=F;
    33         if (a.a[a.len+1]) a.len++;
    34         return a;
    35     }
    36     friend Highn operator+(Highn b,Highn a)
    37     {
    38         Highn c;
    39         c.len=max(a.len,b.len);
    40         For(i,c.len)
    41         {
    42             c.a[i]+=a.a[i]+b.a[i];
    43             c.a[i+1]+=c.a[i]/F;
    44             c.a[i]%=F;
    45         }
    46         c.len++;
    47         while (!c.a[c.len]) c.len--;
    48         return c;
    49     }
    50     friend Highn operator-(Highn a,Highn b)
    51     {
    52         Highn c;
    53         c.len=max(a.len,b.len);
    54         For(i,c.len)
    55         {
    56             c.a[i]+=a.a[i]-b.a[i];
    57             if (c.a[i]<0) c.a[i]+=F,c.a[i+1]--;
    58         //  c.a[i+1]+=c.a[i]/F;
    59         //  c.a[i]%=F;
    60         }
    61         while (!c.a[c.len]) c.len--;
    62         return c;
    63     }
    64    
    65     void print()
    66     {
    67         printf("%d",a[len]);
    68         ForD(i,len-1)
    69         {
    70             printf("%04d",a[i]);
    71         }
    72         puts("");
    73     }
    74 }f[MAXN];
    75 int main()
    76 {
    77 //  freopen(".in","r",stdin);
    78 //  freopen(".out","w",stdout);
    79     scanf("%d",&n);
    80     f[1]=1,f[2]=5;
    81     if (n<=2) f[n].print();
    82     else
    83     {
    84         Fork(i,3,n) f[i]=3*f[i-1]-f[i-2]+2;
    85         f[n].print();
    86     }
    87    
    88    
    89     return 0;
    90 }
    View Code

    由于知道递推式以后懒得写又抄了一次别人代码。。

  • 相关阅读:
    jxl导出excel的问题
    java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
    在MyEclipse中用debug调试应用程序
    添加 MyEclipse Persistence Tools 类库
    使用递归算法结合数据库解析成java树形结构
    String.format()用法
    在ubuntu下使用Eclipse搭建Hadoop开发环境
    Ubuntu下伪分布式模式Hadoop的安装及配置
    ubuntu10.10手工安装jdk1.6
    docker 清理容器和镜像
  • 原文地址:https://www.cnblogs.com/wulala979/p/3506139.html
Copyright © 2020-2023  润新知