zoukankan      html  css  js  c++  java
  • wenbao与卡特兰数

    打表 

     1 LL h[maxn];
     2 
     3 LL exp_mod(LL a){
     4     LL b = MOD - 2;
     5     LL res = 1;
     6     while (b){
     7         if (b & 1)
     8             res = (res*a) % MOD;
     9         b >>= 1;
    10         a = (a*a) % MOD;
    11     }
    12     return res;
    13 }
    14 
    15 void init(){
    16     LL i;
    17     h[0] = h[1] = 1;
    18     for (i = 2; i < maxn; i++)
    19         h[i] = (((4 * i - 2) % MOD * exp_mod(i + 1)) % MOD * h[i - 1]) % MOD;
    20 }

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    http://acm.hdu.edu.cn/showproblem.php?pid=1023

    卡特兰数,非常好的一个练习大数的题目

    说到大数当然首推java(python忽略)

     1 import java.util.*;
     2 import java.math.*;
     3 public class Main{
     4     private static BigInteger a[] = new BigInteger [105];
     5     public static void init(){
     6         BigInteger x = new BigInteger ("1");
     7         a[0] = x;
     8         for(int i = 1; i <= 100; ++i){
     9             Integer xxx = 4*i-2;
    10             Integer y = i+1;
    11             BigInteger xx = new BigInteger(xxx.toString()), yy = new BigInteger(y.toString());
    12             a[i] = (a[i-1].multiply(xx)).divide(yy);
    13             //System.out.println(a[i]);
    14         }
    15     }
    16     public static void main(String args[]){
    17         init();
    18         Scanner cin = new Scanner(System.in);
    19         while(cin.hasNext()){
    20             int b = cin.nextInt();
    21             System.out.println(a[b]);
    22         }
    23     }
    24 }

    不得不说java的包真的厉害,毕竟是大牛写的,优化到极致。

    所以说要多看源码,多向大牛看齐!!!

    我们可以将一个大数转化成为一个尽量大的n进制数(充分利用内存),将每一位放在数组里面。OK!就这么简单

     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 const int maxn = 105;
     5 const int Mod = 1e5;
     6 int f[maxn][maxn];
     7 void mul(int a[], int x){
     8     int sum = 0;
     9     for(int i = maxn-1; i >= 0; --i){
    10         sum += a[i]*x;
    11         a[i] = sum%Mod;
    12         sum /= Mod;
    13     }
    14 }
    15 void div(int a[], int x){
    16     int sum = 0;
    17     for(int i = 0; i < maxn; ++i){
    18         sum = (sum*Mod + a[i]);
    19         a[i] = sum/x;
    20         sum %= x;
    21     }
    22 }
    23 void init(){
    24     memset(f[1], 0, sizeof(int)*maxn);
    25     f[1][maxn-1] = 1;
    26     for(int i = 2; i <= 100; ++i){
    27         memcpy(f[i], f[i-1], sizeof(int)*maxn);
    28         mul(f[i], 4*i-2);
    29         div(f[i], i+1);
    30     }
    31 }
    32 void pri(int x){
    33     int i;
    34     for(i = 0; !f[x][i]; ++i);
    35     printf("%d", f[x][i]);
    36     i++;
    37     for(; i < maxn; ++i){
    38         printf("%05d", f[x][i]);
    39     }
    40     printf("
    ");
    41 }
    42 int main(){
    43     init();
    44     int x;
    45     while(~scanf("%d", &x)){
    46         pri(x);
    47     }
    48     return 0;
    49 }

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    只有不断学习才能进步!

  • 相关阅读:
    有点成熟的短句,最新个性签名
    ACM2039_三角形三边关系
    Android 绘制中国地图
    Opengl-法线贴图(用来细化表面的表现表现的凹凸)
    Go的sync
    Laravel Study(使用 Laravel )
    对于宅男来说,硬盘里的数据就是命
    设计模式之模板方法模式
    游戏掉落道具掉落
    NEWMING
  • 原文地址:https://www.cnblogs.com/wenbao/p/6764198.html
Copyright © 2011-2022 走看看