zoukankan      html  css  js  c++  java
  • BZOJ1002: [FJOI2007]轮状病毒

    Description

    给定n(N<=100),编程计算有多少个不同的n轮状病毒。

    Input

    第一行有1个正整数n。

    Output

    将编程计算出的不同的n轮状病毒数输出

    Sample Input

    3

    Sample Output

    16

    很遗憾,关于递推公式的印象已经变得模糊了。总而言之上马高精度,运算符重载不敢写,直接返回速度慢但我乐意,应该直接能看代码吧。

     1 #include <cstdio>
     2 #include <cstring>
     3 #define MAXN 1010
     4 using namespace std;
     5  
     6 struct BigInteger {
     7     int a[MAXN];
     8     const static int L = 1000;
     9      
    10     BigInteger() {
    11         memset(a, 0, sizeof(a)); 
    12     }
    13 };
    14  
    15 BigInteger f[1010][2];
    16 int n;
    17      
    18     BigInteger Init(int N) {
    19         BigInteger ans;
    20         for (int i = 1; i <= ans.L; i++) {
    21             ans.a[i] = N % 10;
    22             N /= 10;
    23             if (N == 0) break;
    24         }
    25         return ans;
    26     }
    27      
    28     BigInteger Plus(BigInteger A, BigInteger B) {
    29         BigInteger ans;
    30         int k = 0;
    31         for (int i = 1; i <= ans.L; i++) {
    32             ans.a[i] = A.a[i] + B.a[i] + k;
    33             k = ans.a[i] / 10, ans.a[i] %= 10;
    34         }
    35         return ans;
    36     }
    37      
    38     BigInteger Minus(BigInteger A, BigInteger B) {
    39         BigInteger ans;
    40         for (int i = 1; i <= ans.L; i++) ans.a[i] = A.a[i];
    41         for (int i = 1; i <= ans.L; i++) {
    42             ans.a[i] -= B.a[i];
    43             if (ans.a[i] < 0) { ans.a[i] += 10, ans.a[i + 1]--; }
    44         }
    45         return ans;
    46     }
    47      
    48     BigInteger Times(BigInteger A, int B) {
    49         BigInteger ans;
    50         for (int i = 1; i <= ans.L; i++) {
    51             ans.a[i] += A.a[i] * B;
    52             if (ans.a[i] > 9) {
    53                 ans.a[i + 1] += ans.a[i] / 10;
    54                 ans.a[i] %= 10;
    55             }
    56         }
    57         return ans;
    58     }
    59      
    60     void Print(BigInteger A) {
    61         int flag = 0;
    62         for (int i = A.L; i >= 1; i--) {
    63             if (flag) printf("%d", A.a[i]);
    64             else if (A.a[i] > 0) {
    65                 printf("%d", A.a[i]);
    66                 flag = 1;
    67             }
    68         }
    69         if (flag == 0) printf("0");
    70         printf("
    ");
    71     }
    72      
    73     void Prepare() {
    74         f[0][1] = Init(1);
    75         f[1][1] = Init(1), f[1][0] = Init(1);
    76     }
    77      
    78 int main() {
    79     scanf("%d", &n);
    80     Prepare();
    81     for (int i = 2; i < n; i++) {
    82         f[i][0] = Plus(f[i - 1][0], f[i - 1][1]);
    83         f[i][1] = Plus(f[i][0], f[i - 1][1]);
    84     }
    85     BigInteger ans;
    86     for (int i = 1; i <= n; i++) ans = Plus(ans, Times(Times(f[n - i][1], i), i));
    87     Print(ans);
    88     return 0;
    89 }
    BZOJ1002
  • 相关阅读:
    STM32使用keil串口输出中文乱码问题
    STM32CUBEMX忘记配置sys中的debug导致程序只能下载一次的问题
    远渡重洋的开源之路我是买家项目
    其实我就是个技术迷自身定位及展望
    五一上海行
    The Secret 秘密 读书笔记
    MySQL数据库设计复习笔记及项目实战
    PHP可调试团队开发环境配置支持企业级开发
    WIN7下QQ概念版使用手记
    Memento
  • 原文地址:https://www.cnblogs.com/VOHAHRV/p/4928865.html
Copyright © 2011-2022 走看看