Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct memo{
  6.     int v[10];
  7.     memo(){
  8.         for(int i = 0;i < 10;i++)
  9.             v[i] = 0;
  10.     }
  11.     memo(int _v0,int _v1,int _v2,int _v3,int _v4,int _v5,int _v6,int _v7,int _v8,int _v9) {
  12.         v[0] = _v0;
  13.         v[1] = _v1;
  14.         v[2] = _v2;
  15.         v[3] = _v3;
  16.         v[4] = _v4;
  17.         v[5] = _v5;
  18.         v[6] = _v6;
  19.         v[7] = _v7;
  20.         v[8] = _v8;
  21.         v[9] = _v9;
  22.     }
  23.     memo operator +(const memo other) const{
  24.         memo n;
  25.         for(int i = 0;i < 10;i++)
  26.             n.v[i] = v[i] + other.v[i];
  27.         return n;
  28.     }
  29. };
  30.  
  31. memo pd[10][8];
  32.  
  33. void init() {
  34.     pd[0][0] = memo(0,0,0,0,0,0,0,0,0,0);
  35.     pd[0][1] = memo(0,0,0,0,0,0,0,0,0,0);
  36.     pd[0][2] = memo(0,0,0,0,0,0,0,0,0,0);
  37.     pd[0][3] = memo(0,0,0,0,0,0,0,0,0,0);
  38.     pd[0][4] = memo(0,0,0,0,0,0,0,0,0,0);
  39.     pd[0][5] = memo(0,0,0,0,0,0,0,0,0,0);
  40.     pd[0][6] = memo(0,0,0,0,0,0,0,0,0,0);
  41.     pd[0][7] = memo(0,0,0,0,0,0,0,0,0,0);
  42.     pd[0][8] = memo(0,0,0,0,0,0,0,0,0,0);
  43.     pd[1][0] = memo(0,1,0,0,0,0,0,0,0,0);
  44.     pd[1][1] = memo(1,2,1,1,1,1,1,1,1,1);
  45.     pd[1][2] = memo(11,21,20,20,20,20,20,20,20,20);
  46.     pd[1][3] = memo(192,301,300,300,300,300,300,300,300,300);
  47.     pd[1][4] = memo(2893,4001,4000,4000,4000,4000,4000,4000,4000,4000);
  48.     pd[1][5] = memo(38894,50001,50000,50000,50000,50000,50000,50000,50000,50000);
  49.     pd[1][6] = memo(488895,600001,600000,600000,600000,600000,600000,600000,600000,600000);
  50.     pd[1][7] = memo(5888896,7000001,7000000,7000000,7000000,7000000,7000000,7000000,7000000,7000000);
  51.     pd[1][8] = memo(68888897,80000001,80000000,80000000,80000000,80000000,80000000,80000000,80000000,80000000);
  52.     pd[2][0] = memo(0,1,1,0,0,0,0,0,0,0);
  53.     pd[2][1] = memo(2,12,3,2,2,2,2,2,2,2);
  54.     pd[2][2] = memo(31,140,41,40,40,40,40,40,40,40);
  55.     pd[2][3] = memo(492,1600,601,600,600,600,600,600,600,600);
  56.     pd[2][4] = memo(6893,18000,8001,8000,8000,8000,8000,8000,8000,8000);
  57.     pd[2][5] = memo(88894,200000,100001,100000,100000,100000,100000,100000,100000,100000);
  58.     pd[2][6] = memo(1088895,2200000,1200001,1200000,1200000,1200000,1200000,1200000,1200000,1200000);
  59.     pd[2][7] = memo(12888896,24000000,14000001,14000000,14000000,14000000,14000000,14000000,14000000,14000000);
  60.     pd[2][8] = memo(148888897,260000000,160000001,160000000,160000000,160000000,160000000,160000000,160000000,160000000);
  61.     pd[3][0] = memo(0,1,1,1,0,0,0,0,0,0);
  62.     pd[3][1] = memo(3,13,13,4,3,3,3,3,3,3);
  63.     pd[3][2] = memo(51,160,160,61,60,60,60,60,60,60);
  64.     pd[3][3] = memo(792,1900,1900,901,900,900,900,900,900,900);
  65.     pd[3][4] = memo(10893,22000,22000,12001,12000,12000,12000,12000,12000,12000);
  66.     pd[3][5] = memo(138894,250000,250000,150001,150000,150000,150000,150000,150000,150000);
  67.     pd[3][6] = memo(1688895,2800000,2800000,1800001,1800000,1800000,1800000,1800000,1800000,1800000);
  68.     pd[3][7] = memo(19888896,31000000,31000000,21000001,21000000,21000000,21000000,21000000,21000000,21000000);
  69.     pd[3][8] = memo(228888897,340000000,340000000,240000001,240000000,240000000,240000000,240000000,240000000,240000000);
  70.     pd[4][0] = memo(0,1,1,1,1,0,0,0,0,0);
  71.     pd[4][1] = memo(4,14,14,14,5,4,4,4,4,4);
  72.     pd[4][2] = memo(71,180,180,180,81,80,80,80,80,80);
  73.     pd[4][3] = memo(1092,2200,2200,2200,1201,1200,1200,1200,1200,1200);
  74.     pd[4][4] = memo(14893,26000,26000,26000,16001,16000,16000,16000,16000,16000);
  75.     pd[4][5] = memo(188894,300000,300000,300000,200001,200000,200000,200000,200000,200000);
  76.     pd[4][6] = memo(2288895,3400000,3400000,3400000,2400001,2400000,2400000,2400000,2400000,2400000);
  77.     pd[4][7] = memo(26888896,38000000,38000000,38000000,28000001,28000000,28000000,28000000,28000000,28000000);
  78.     pd[4][8] = memo(308888897,420000000,420000000,420000000,320000001,320000000,320000000,320000000,320000000,320000000);
  79.     pd[5][0] = memo(0,1,1,1,1,1,0,0,0,0);
  80.     pd[5][1] = memo(5,15,15,15,15,6,5,5,5,5);
  81.     pd[5][2] = memo(91,200,200,200,200,101,100,100,100,100);
  82.     pd[5][3] = memo(1392,2500,2500,2500,2500,1501,1500,1500,1500,1500);
  83.     pd[5][4] = memo(18893,30000,30000,30000,30000,20001,20000,20000,20000,20000);
  84.     pd[5][5] = memo(238894,350000,350000,350000,350000,250001,250000,250000,250000,250000);
  85.     pd[5][6] = memo(2888895,4000000,4000000,4000000,4000000,3000001,3000000,3000000,3000000,3000000);
  86.     pd[5][7] = memo(33888896,45000000,45000000,45000000,45000000,35000001,35000000,35000000,35000000,35000000);
  87.     pd[5][8] = memo(388888897,500000000,500000000,500000000,500000000,400000001,400000000,400000000,400000000,400000000);
  88.     pd[6][0] = memo(0,1,1,1,1,1,1,0,0,0);
  89.     pd[6][1] = memo(6,16,16,16,16,16,7,6,6,6);
  90.     pd[6][2] = memo(111,220,220,220,220,220,121,120,120,120);
  91.     pd[6][3] = memo(1692,2800,2800,2800,2800,2800,1801,1800,1800,1800);
  92.     pd[6][4] = memo(22893,34000,34000,34000,34000,34000,24001,24000,24000,24000);
  93.     pd[6][5] = memo(288894,400000,400000,400000,400000,400000,300001,300000,300000,300000);
  94.     pd[6][6] = memo(3488895,4600000,4600000,4600000,4600000,4600000,3600001,3600000,3600000,3600000);
  95.     pd[6][7] = memo(40888896,52000000,52000000,52000000,52000000,52000000,42000001,42000000,42000000,42000000);
  96.     pd[6][8] = memo(468888897,580000000,580000000,580000000,580000000,580000000,480000001,480000000,480000000,480000000);
  97.     pd[7][0] = memo(0,1,1,1,1,1,1,1,0,0);
  98.     pd[7][1] = memo(7,17,17,17,17,17,17,8,7,7);
  99.     pd[7][2] = memo(131,240,240,240,240,240,240,141,140,140);
  100.     pd[7][3] = memo(1992,3100,3100,3100,3100,3100,3100,2101,2100,2100);
  101.     pd[7][4] = memo(26893,38000,38000,38000,38000,38000,38000,28001,28000,28000);
  102.     pd[7][5] = memo(338894,450000,450000,450000,450000,450000,450000,350001,350000,350000);
  103.     pd[7][6] = memo(4088895,5200000,5200000,5200000,5200000,5200000,5200000,4200001,4200000,4200000);
  104.     pd[7][7] = memo(47888896,59000000,59000000,59000000,59000000,59000000,59000000,49000001,49000000,49000000);
  105.     pd[7][8] = memo(548888897,660000000,660000000,660000000,660000000,660000000,660000000,560000001,560000000,560000000);
  106.     pd[8][0] = memo(0,1,1,1,1,1,1,1,1,0);
  107.     pd[8][1] = memo(8,18,18,18,18,18,18,18,9,8);
  108.     pd[8][2] = memo(151,260,260,260,260,260,260,260,161,160);
  109.     pd[8][3] = memo(2292,3400,3400,3400,3400,3400,3400,3400,2401,2400);
  110.     pd[8][4] = memo(30893,42000,42000,42000,42000,42000,42000,42000,32001,32000);
  111.     pd[8][5] = memo(388894,500000,500000,500000,500000,500000,500000,500000,400001,400000);
  112.     pd[8][6] = memo(4688895,5800000,5800000,5800000,5800000,5800000,5800000,5800000,4800001,4800000);
  113.     pd[8][7] = memo(54888896,66000000,66000000,66000000,66000000,66000000,66000000,66000000,56000001,56000000);
  114.     pd[8][8] = memo(628888897,740000000,740000000,740000000,740000000,740000000,740000000,740000000,640000001,640000000);
  115.     pd[9][0] = memo(0,1,1,1,1,1,1,1,1,1);
  116.     pd[9][1] = memo(9,19,19,19,19,19,19,19,19,10);
  117.     pd[9][2] = memo(171,280,280,280,280,280,280,280,280,181);
  118.     pd[9][3] = memo(2592,3700,3700,3700,3700,3700,3700,3700,3700,2701);
  119.     pd[9][4] = memo(34893,46000,46000,46000,46000,46000,46000,46000,46000,36001);
  120.     pd[9][5] = memo(438894,550000,550000,550000,550000,550000,550000,550000,550000,450001);
  121.     pd[9][6] = memo(5288895,6400000,6400000,6400000,6400000,6400000,6400000,6400000,6400000,5400001);
  122.     pd[9][7] = memo(61888896,73000000,73000000,73000000,73000000,73000000,73000000,73000000,73000000,63000001);
  123.     pd[9][8] = memo(708888897,820000000,820000000,820000000,820000000,820000000,820000000,820000000,820000000,720000001);
  124.  
  125. }
  126.  
  127. void f(memo n) {
  128.     for(int i = 0;i < 10;i++)
  129.         printf("%d ",n.v[i]);
  130.     puts("");
  131. }
  132.  
  133. int p10(int x) {
  134.     int res = 1;
  135.     for(int i = 0;i < x;i++)
  136.         res *= 10;
  137.     return res;
  138. }
  139.  
  140. memo calc(int x) {
  141.     //puts("");
  142.     memo res;
  143.     int cnt = 0;
  144.     if(x == 0)
  145.         return pd[0][1];
  146.     int ant = 0;
  147.     while(x) {
  148.         int aux = x%10;
  149.         ///printf("%d %d: ",aux,cnt);
  150.         //f(pd[aux][cnt]);
  151.         res = res + pd[aux][cnt++];
  152.         res.v[aux] += ant;
  153.         ant += aux*p10(cnt-1);     
  154.         x /= 10;
  155.     }
  156.     //f(res);
  157.     return res;
  158. }
  159.  
  160. int main() {
  161.     init();
  162.     int x,y;
  163.     while(1) {
  164.         cin >> x >> y;
  165.         if(!x && !y) break;
  166.         memo r1 = calc(x-1);
  167.         memo r2 = calc(y);
  168.         //f(r1);
  169.         //f(r2);
  170.        
  171.         for(int i = 0;i < 10;i++) {
  172.             if(i)
  173.                 printf(" %d",r2.v[i]-r1.v[i]);
  174.             else
  175.                 printf("%d",r2.v[i]-r1.v[i]);
  176.         }
  177.         puts("");
  178.     }
  179.     return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement