Advertisement
add1ctus

Селфи

Mar 8th, 2015
532
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. int cifri[]={0,1,2,5,8};
  8. vector<int> limit1,limit2,number;
  9.  
  10. bool test(vector<int> &v)
  11. {
  12.  
  13.     for(int i=0;i<limit1.size();i++)
  14.         if(limit1[i]>v[i])
  15.             return false;
  16.         else if(limit1[i]<v[i])
  17.             break;
  18.  
  19.     for(int i=0;i<limit2.size();i++)
  20.         if(limit2[i]>v[i])
  21.             break;
  22.         else if(limit2[i]<v[i])
  23.             return false;
  24.     return true;
  25. }
  26.  
  27. int mirror(vector<int> v)
  28. {
  29.     int result=0;
  30.     if(limit1.size()%2==1)
  31.     {
  32.         int num=1;
  33.         v.push_back(0);
  34.         for(int i=v.size()-2;i>=0;i--)
  35.         {
  36.             num++;
  37.             if(v[i]==5)
  38.                 v.push_back(2);
  39.             else if(v[i]==2)
  40.                 v.push_back(5);
  41.             else
  42.                 v.push_back(v[i]);
  43.         }
  44.         if(test(v))
  45.             result++;
  46.         while(num--)
  47.             v.pop_back();
  48.         num=1;
  49.         v.push_back(1);
  50.         for(int i=v.size()-2;i>=0;i--)
  51.         {
  52.             num++;
  53.             if(v[i]==5)
  54.                 v.push_back(2);
  55.             else if(v[i]==2)
  56.                 v.push_back(5);
  57.             else
  58.                 v.push_back(v[i]);
  59.         }
  60.         if(test(v))
  61.             result++;
  62.         while(num--)
  63.             v.pop_back();
  64.         num=1;
  65.         v.push_back(8);
  66.         for(int i=v.size()-2;i>=0;i--)
  67.         {
  68.             num++;
  69.             if(v[i]==5)
  70.                 v.push_back(2);
  71.             else if(v[i]==2)
  72.                 v.push_back(5);
  73.             else
  74.                 v.push_back(v[i]);
  75.         }
  76.         if(test(v))
  77.             result++;
  78.         return result;
  79.     }
  80.     else
  81.     {
  82.         for(int i=v.size()-1;i>=0;i--)
  83.         {
  84.             if(v[i]==5)
  85.                 v.push_back(2);
  86.             else if(v[i]==2)
  87.                 v.push_back(5);
  88.             else
  89.                 v.push_back(v[i]);
  90.         }
  91.         if(test(v))
  92.             return 1;
  93.         else
  94.             return 0;
  95.     }
  96. }
  97.  
  98. int broj_na_palindromi(int n)
  99. {
  100.     int result=0;
  101.     if(n==0)
  102.     {
  103.         result+=mirror(number);
  104.     }
  105.     else
  106.     {
  107.         int start;
  108.  
  109.         if(number.empty())
  110.             start=1;
  111.         else
  112.             start=0;
  113.  
  114.         for( ; start<5 ; start++)
  115.         {
  116.             number.push_back(cifri[start]);
  117.             result+=broj_na_palindromi(n-1);
  118.             number.pop_back();
  119.         }
  120.     }
  121.     return result;
  122. }
  123.  
  124. int brojNaCifri(long long n)
  125. {
  126.     if(n==0)
  127.         return 1;
  128.     int rez=0;
  129.     while(n>0)
  130.     {
  131.         rez++;
  132.         n/=10;
  133.     }
  134.     return rez;
  135. }
  136.  
  137. int main()
  138. {
  139.     long long a,b;
  140.     long long dp[19];
  141.     long long result=0;
  142.  
  143.     cin>>a>>b;
  144.  
  145.     dp[2]=4;
  146.     for(int i=3;i<19;i++)
  147.         if(i%2==0)
  148.             dp[i]=dp[i-2]*5;
  149.         else
  150.             dp[i]=dp[i-1]*3;
  151.  
  152.     int cifria,cifrib;
  153.     cifria=brojNaCifri(a);
  154.     cifrib=brojNaCifri(b);
  155.  
  156.     for(int i=cifria+1;i<cifrib;i++)
  157.         result+=dp[i];
  158.  
  159.     if(cifria!=cifrib)
  160.     {
  161.         while(cifria--)
  162.         {
  163.             limit1.push_back(a%10);
  164.             limit2.push_back(9);
  165.             a/=10;
  166.         }
  167.         reverse(limit1.begin(),limit1.end());
  168.         result+=broj_na_palindromi(limit1.size()/2);
  169.         limit1.clear();
  170.         limit2.clear();
  171.         limit1.push_back(1);
  172.         while(cifrib--)
  173.         {
  174.             limit1.push_back(0);
  175.             limit2.push_back(b%10);
  176.             b/=10;
  177.         }
  178.         limit1.pop_back();
  179.         reverse(limit2.begin(),limit2.end());
  180.         result+=broj_na_palindromi(limit2.size()/2);
  181.     }
  182.  
  183.     else
  184.     {
  185.         while(cifria--)
  186.         {
  187.             limit1.push_back(a%10);
  188.             limit2.push_back(b%10);
  189.             a/=10;
  190.             b/=10;
  191.         }
  192.         reverse(limit1.begin(),limit1.end());
  193.         reverse(limit2.begin(),limit2.end());
  194.         result+=broj_na_palindromi(cifrib/2);
  195.     }
  196.  
  197.     cout<<result;
  198.     return 0;
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement