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

简单大数模板(+ - )--待完善

时间:2014-05-10 07:13:10      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

    水了ural的dp专题前三道1009,1012,1013,都是同一个问题,只是数据规模变大了。

    题意大概是这样的:求一个k进制的n位数字,满足不含前导0和不含连续两个0的个数有多少个。

    dp[i][0]表示第i位为0有多少个满足条件,dp[i][1]表示i位不为0满足条件的个数,则结果就是dp[n][1];

    递推关系如下:

  dp[i][0]=dp[i-1][1];
  dp[i][1]=(dp[i-1][0]+dp[i-1][1])*k;

   顺便贴上简单的大数类

  

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<iomanip>
 3 #include<cstring>
 4 #include<stdio.h>
 5 #include<map>
 6 #include<cmath>
 7 #include<algorithm>
 8 #include<vector>
 9 #include<stack>
10 #include<fstream>
11 #include<queue>
12 #define rep(i,n) for(int i=0;i<n;i++)
13 #define fab(i,a,b) for(int i=(a);i<=(b);i++)
14 #define fba(i,b,a) for(int i=(b);i>=(a);i--)
15 #define MP make_pair
16 #define PB push_back
17 
18 using namespace std;
19 const int N=2005;
20 class BigInteger{
21     static const int MAX_LEN=2000;//允许最大位数 
22     int d[MAX_LEN]; 
23     int len;//位数 
24   public:
25       BigInteger(int v=0){
26           memset(d,0,sizeof(d));//初始化为0 
27           len=0;
28           while(v){
29               d[len++]=v%10;
30               v/=10;
31           }
32           if(len==0){ //值是0时特殊处理 
33               len=1;
34           }
35       }
36     //+
37       BigInteger operator + (const BigInteger other )const {
38       BigInteger ret;
39       ret.len=max(len,other.len);
40       rep(i,ret.len)ret.d[i]=d[i]+other.d[i];//忽略进位逐位相加 
41       rep(i,ret.len){
42           //进位 
43         if(ret.d[i]>9){
44           ret.d[i]-=10;
45           ret.d[i+1]++;
46         }
47       }
48       if(ret.d[ret.len]>0)ret.len++;//最高位进位 
49       return ret;
50     }
51     //*
52     BigInteger operator* (const BigInteger other)const {
53        BigInteger ret;
54        ret.len = len+other.len-1; //两个数乘后总位数 
55        rep(i,len){
56          rep(j,other.len){
57              //模拟乘法过程 
58            ret.d[i+j]+=d[i]*other.d[j];
59          }
60        }
61        rep(i,ret.len){
62          if(ret.d[i]>9){
63            ret.d[i+1]+=ret.d[i]/10;
64            ret.d[i]%=10;
65          }
66        }
67        if(ret.d[ret.len]>0)ret.len++;
68        //如果乘数是0,特殊处理,去掉前导0 
69        while(ret.len>1&&ret.d[ret.len-1]==0)ret.len--;
70        return ret;
71     }
72     void print(){//输出 
73        fba(i,len-1,0)cout<<d[i];
74        cout<<endl;
75     }
76 
77 };
78 BigInteger dp[N][2];
79 int main(){
80     ios::sync_with_stdio(false);
81     int n,k;
82     cin>>n>>k;
83     k--;
84     memset(dp,0,sizeof(dp));
85     dp[1][0]=1;
86     dp[1][1]=k;
87     for(int i=2;i<=n;i++){
88       dp[i][0]=dp[i-1][1];
89       dp[i][1]=(dp[i-1][0]+dp[i-1][1])*k;
90     }
91     dp[n][1].print();
92     return 0;
93 }
bubuko.com,布布扣

 

简单大数模板(+ - )--待完善,布布扣,bubuko.com

简单大数模板(+ - )--待完善

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/wanggp3/p/3719901.html

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