您的位置:首页 > 其它

BZOJ1002: [FJOI2007]轮状病毒

2017-12-28 07:15 267 查看

n<=100的形如

1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<stdlib.h>
5 //#include<queue>
6 #include<math.h>
7 //#include<time.h>
8 //#include<iostream>
9 using namespace std;
10
11 int n;
12 #define maxn 311
13 const int base=100000000;
14 struct LLL
15 {
16     int num[maxn],len;
17     LLL() {len=0; memset(num,0,sizeof(num));}
18     void operator = (int x)
19     {
20         if (x==0) {num[len=1]=0; return;}
21         while (x) {num[++len]=x%base; x/=base;}
22     }
23     LLL operator + (const LLL &b)
24     {
25         LLL ans;
26         for (int i=1,top=ans.len=max(len,b.len);i<=top;i++)
27         {
28             ans.num[i]+=(i<=len?num[i]:0)+(i<=b.len?b.num[i]:0);
29             if (ans.num[i]>=base)
30             {
31                 ans.num[i]-=base;
32                 ans.num[i+1]++;
33             }
34         }
35         ans.len+=(ans.num[ans.len+1]>0);
36         return ans;
37     }
38     LLL operator - (const LLL &b)
39     {
40         LLL ans;
41         for (int i=1,top=ans.len=len;i<=top;i++)
42         {
43             ans.num[i]+=num[i]-(i<=b.len?b.num[i]:0);
44             if (ans.num[i]<0)
45             {
46                 ans.num[i]+=base;
47                 ans.num[i+1]--;
48             }
49         }
50         ans.len-=(ans.num[ans.len]==0);
51         return ans;
52     }
53     LLL operator + (int b)
54     {
55         LLL tmp; tmp=b;
56         return *this+tmp;
57     }
58     void print()
59     {
60         printf("%d",num[len]);
61         for (int i=len-1;i;i--) printf("%08d",num[i]);
62     }
63 };
64
65 LLL a[maxn];
66 int main()
67 {
68     scanf("%d",&n);
69     a[1]=1; a[2]=5;
70     for (int i=3;i<=n;i++) a[i]=a[i-1]+a[i-1]+a[i-1]-a[i-2]+2;
71     a
.print();
72     return 0;
73 }
View Code  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: