Tranvick

Untitled

Dec 14th, 2011
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <cstdio>
  2. #include <memory.h>
  3. #define N 10001
  4. #define P 10000
  5.  
  6. struct bigint{
  7.     int sz;
  8.     int a[777];
  9.     bigint(int x=0){
  10.         sz=0;
  11.         memset(a,0,sizeof(a));
  12.         while (x){
  13.             a[++sz]=x%P;
  14.             x/=P;
  15.         }
  16.         if (!sz) ++sz;
  17.     }
  18.     int & operator [] (int x){
  19.         return a[x];
  20.     }
  21.     void print(){
  22.         printf("%d",a[sz]);
  23.         for (int i=sz-1;i>=1;i--) printf("%.4d",a[i]);
  24.         printf("\n");
  25.     }
  26. } f[N],t(1);
  27. int n,k;
  28.  
  29. bigint operator + (bigint & a,bigint & b){
  30.     bigint res;
  31.     int k=a.sz>b.sz?a.sz:b.sz;
  32.     for (int i=1;i<=k;i++){
  33.         res[i]+=a[i]+b[i];
  34.         res[i+1]=res[i]/P;
  35.         res[i]%=P;
  36.     }
  37.     if (res[k+1]) ++k;
  38.     res.sz=k;
  39.     return res;
  40. }
  41.  
  42. bigint operator - (bigint &a,bigint &b){
  43.         bigint res;
  44.         int k=a.sz;
  45.         for (int i=1;i<=k;i++){
  46.             res[i]+=a[i]-b[i];
  47.             if (res[i]<0){
  48.                 res[i]+=P;
  49.                 res[i+1]--;
  50.             }
  51.         }
  52.         while (res[k]==0) --k;
  53.         res.sz=k;
  54.         return res;
  55. }
  56.  
  57. int main(){
  58.     scanf("%d%d",&n,&k);f[0]=bigint(1);
  59.     if (k==0){
  60.         printf("1\n");
  61.         return 0;
  62.     }
  63.     for (int i=1;i<=n;i++){
  64.         if (i<=k) f[i]=f[i-1]+f[i-1];
  65.         else if (i==k+1){
  66.             f[i]=f[i-1]+f[i-1];
  67.             f[i]=f[i]-t;
  68.         }
  69.         else{
  70.             f[i]=f[i-1]+f[i-1];
  71.             f[i]=f[i]-f[i-k-2];
  72.         }
  73.     }
  74.     f[n].print();
  75.     return 0;
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment