v 0. Pasted by slipstak2 as cpp at 2010-11-29 17:07:36 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 7.
  2. // 7B. Сообщение [message]
  3. // ibelyaev: 24Nov2010
  4. #include <iostream>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <string>
  8. #include <string.h>
  9.  
  10. using namespace std;
  11. const int max_size = 15;
  12. int osn = 1000;
  13. char* format = "%.3d";
  14. struct BigInt
  15. {
  16.     int amount;
  17.     int digits[max_size];
  18.     BigInt()
  19.     {
  20.         memset(digits,0,sizeof(digits));
  21.         amount = 1;
  22.     }
  23.     BigInt(int n)
  24.     {
  25.         memset(digits,0,sizeof(digits));
  26.         amount = 1;
  27.         digits[0] = n;
  28.     }
  29.     void output()
  30.     {
  31.         printf("%d",digits[amount-1]);
  32.         for (int i=amount-2;i>=0;i--)
  33.             printf(format,digits[i]);
  34.     }
  35. };
  36. BigInt operator + (const BigInt &a, const BigInt &b)
  37. {
  38.     BigInt res;
  39.     res.amount = max(a.amount, b.amount);
  40.     int r = 0;
  41.     for (int i=0;i<res.amount || r;i++)
  42.     {
  43.         res.digits[i] = a.digits[i] + b.digits[i] + r;
  44.         if (res.digits[i] >= osn)
  45.         {
  46.             res.digits[i] -= osn;
  47.             r = 1;
  48.         }
  49.         else
  50.             r = 0;
  51.     }
  52.     if (res.digits[res.amount])
  53.         res.amount++;
  54.     return res;
  55. }
  56. int n;
  57. string str;
  58. vector<BigInt> mas;
  59. void input()
  60. {
  61.     cin>>str;
  62.     str.insert(str.begin(),'*');
  63. }
  64. bool isCorrect(char a, char b)
  65. {
  66.     int num = 10*(a - '0') + b - '0';
  67.     return 10<=num && num<=33;
  68. }
  69. void solve()
  70. {
  71.     mas.resize(str.size());
  72.     mas[0] = 1;
  73.     mas[1] = 1;
  74.     for (size_t i=2;i<mas.size();i++)
  75.     {
  76.         mas[i] = mas[i] +  mas[i-1];
  77.         if (isCorrect(str[i-1],str[i]))
  78.             mas[i] = mas[i] + mas[i-2];
  79.     }
  80.     mas.back().output();
  81. }
  82. int main()
  83. {
  84.     freopen("input.txt","r",stdin);
  85.     freopen("output.txt","w",stdout);
  86.    
  87.     input();
  88.     solve();
  89.     return 0;
  90. }


Editing is locked.