Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct memo{
- int v[10];
- memo(){
- for(int i = 0;i < 10;i++)
- v[i] = 0;
- }
- memo(int _v0,int _v1,int _v2,int _v3,int _v4,int _v5,int _v6,int _v7,int _v8,int _v9) {
- v[0] = _v0;
- v[1] = _v1;
- v[2] = _v2;
- v[3] = _v3;
- v[4] = _v4;
- v[5] = _v5;
- v[6] = _v6;
- v[7] = _v7;
- v[8] = _v8;
- v[9] = _v9;
- }
- memo operator +(const memo other) const{
- memo n;
- for(int i = 0;i < 10;i++)
- n.v[i] = v[i] + other.v[i];
- return n;
- }
- };
- memo pd[10][8];
- void init() {
- pd[0][0] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][1] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][2] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][3] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][4] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][5] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][6] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][7] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[0][8] = memo(0,0,0,0,0,0,0,0,0,0);
- pd[1][0] = memo(0,1,0,0,0,0,0,0,0,0);
- pd[1][1] = memo(1,2,1,1,1,1,1,1,1,1);
- pd[1][2] = memo(11,21,20,20,20,20,20,20,20,20);
- pd[1][3] = memo(192,301,300,300,300,300,300,300,300,300);
- pd[1][4] = memo(2893,4001,4000,4000,4000,4000,4000,4000,4000,4000);
- pd[1][5] = memo(38894,50001,50000,50000,50000,50000,50000,50000,50000,50000);
- pd[1][6] = memo(488895,600001,600000,600000,600000,600000,600000,600000,600000,600000);
- pd[1][7] = memo(5888896,7000001,7000000,7000000,7000000,7000000,7000000,7000000,7000000,7000000);
- pd[1][8] = memo(68888897,80000001,80000000,80000000,80000000,80000000,80000000,80000000,80000000,80000000);
- pd[2][0] = memo(0,1,1,0,0,0,0,0,0,0);
- pd[2][1] = memo(2,12,3,2,2,2,2,2,2,2);
- pd[2][2] = memo(31,140,41,40,40,40,40,40,40,40);
- pd[2][3] = memo(492,1600,601,600,600,600,600,600,600,600);
- pd[2][4] = memo(6893,18000,8001,8000,8000,8000,8000,8000,8000,8000);
- pd[2][5] = memo(88894,200000,100001,100000,100000,100000,100000,100000,100000,100000);
- pd[2][6] = memo(1088895,2200000,1200001,1200000,1200000,1200000,1200000,1200000,1200000,1200000);
- pd[2][7] = memo(12888896,24000000,14000001,14000000,14000000,14000000,14000000,14000000,14000000,14000000);
- pd[2][8] = memo(148888897,260000000,160000001,160000000,160000000,160000000,160000000,160000000,160000000,160000000);
- pd[3][0] = memo(0,1,1,1,0,0,0,0,0,0);
- pd[3][1] = memo(3,13,13,4,3,3,3,3,3,3);
- pd[3][2] = memo(51,160,160,61,60,60,60,60,60,60);
- pd[3][3] = memo(792,1900,1900,901,900,900,900,900,900,900);
- pd[3][4] = memo(10893,22000,22000,12001,12000,12000,12000,12000,12000,12000);
- pd[3][5] = memo(138894,250000,250000,150001,150000,150000,150000,150000,150000,150000);
- pd[3][6] = memo(1688895,2800000,2800000,1800001,1800000,1800000,1800000,1800000,1800000,1800000);
- pd[3][7] = memo(19888896,31000000,31000000,21000001,21000000,21000000,21000000,21000000,21000000,21000000);
- pd[3][8] = memo(228888897,340000000,340000000,240000001,240000000,240000000,240000000,240000000,240000000,240000000);
- pd[4][0] = memo(0,1,1,1,1,0,0,0,0,0);
- pd[4][1] = memo(4,14,14,14,5,4,4,4,4,4);
- pd[4][2] = memo(71,180,180,180,81,80,80,80,80,80);
- pd[4][3] = memo(1092,2200,2200,2200,1201,1200,1200,1200,1200,1200);
- pd[4][4] = memo(14893,26000,26000,26000,16001,16000,16000,16000,16000,16000);
- pd[4][5] = memo(188894,300000,300000,300000,200001,200000,200000,200000,200000,200000);
- pd[4][6] = memo(2288895,3400000,3400000,3400000,2400001,2400000,2400000,2400000,2400000,2400000);
- pd[4][7] = memo(26888896,38000000,38000000,38000000,28000001,28000000,28000000,28000000,28000000,28000000);
- pd[4][8] = memo(308888897,420000000,420000000,420000000,320000001,320000000,320000000,320000000,320000000,320000000);
- pd[5][0] = memo(0,1,1,1,1,1,0,0,0,0);
- pd[5][1] = memo(5,15,15,15,15,6,5,5,5,5);
- pd[5][2] = memo(91,200,200,200,200,101,100,100,100,100);
- pd[5][3] = memo(1392,2500,2500,2500,2500,1501,1500,1500,1500,1500);
- pd[5][4] = memo(18893,30000,30000,30000,30000,20001,20000,20000,20000,20000);
- pd[5][5] = memo(238894,350000,350000,350000,350000,250001,250000,250000,250000,250000);
- pd[5][6] = memo(2888895,4000000,4000000,4000000,4000000,3000001,3000000,3000000,3000000,3000000);
- pd[5][7] = memo(33888896,45000000,45000000,45000000,45000000,35000001,35000000,35000000,35000000,35000000);
- pd[5][8] = memo(388888897,500000000,500000000,500000000,500000000,400000001,400000000,400000000,400000000,400000000);
- pd[6][0] = memo(0,1,1,1,1,1,1,0,0,0);
- pd[6][1] = memo(6,16,16,16,16,16,7,6,6,6);
- pd[6][2] = memo(111,220,220,220,220,220,121,120,120,120);
- pd[6][3] = memo(1692,2800,2800,2800,2800,2800,1801,1800,1800,1800);
- pd[6][4] = memo(22893,34000,34000,34000,34000,34000,24001,24000,24000,24000);
- pd[6][5] = memo(288894,400000,400000,400000,400000,400000,300001,300000,300000,300000);
- pd[6][6] = memo(3488895,4600000,4600000,4600000,4600000,4600000,3600001,3600000,3600000,3600000);
- pd[6][7] = memo(40888896,52000000,52000000,52000000,52000000,52000000,42000001,42000000,42000000,42000000);
- pd[6][8] = memo(468888897,580000000,580000000,580000000,580000000,580000000,480000001,480000000,480000000,480000000);
- pd[7][0] = memo(0,1,1,1,1,1,1,1,0,0);
- pd[7][1] = memo(7,17,17,17,17,17,17,8,7,7);
- pd[7][2] = memo(131,240,240,240,240,240,240,141,140,140);
- pd[7][3] = memo(1992,3100,3100,3100,3100,3100,3100,2101,2100,2100);
- pd[7][4] = memo(26893,38000,38000,38000,38000,38000,38000,28001,28000,28000);
- pd[7][5] = memo(338894,450000,450000,450000,450000,450000,450000,350001,350000,350000);
- pd[7][6] = memo(4088895,5200000,5200000,5200000,5200000,5200000,5200000,4200001,4200000,4200000);
- pd[7][7] = memo(47888896,59000000,59000000,59000000,59000000,59000000,59000000,49000001,49000000,49000000);
- pd[7][8] = memo(548888897,660000000,660000000,660000000,660000000,660000000,660000000,560000001,560000000,560000000);
- pd[8][0] = memo(0,1,1,1,1,1,1,1,1,0);
- pd[8][1] = memo(8,18,18,18,18,18,18,18,9,8);
- pd[8][2] = memo(151,260,260,260,260,260,260,260,161,160);
- pd[8][3] = memo(2292,3400,3400,3400,3400,3400,3400,3400,2401,2400);
- pd[8][4] = memo(30893,42000,42000,42000,42000,42000,42000,42000,32001,32000);
- pd[8][5] = memo(388894,500000,500000,500000,500000,500000,500000,500000,400001,400000);
- pd[8][6] = memo(4688895,5800000,5800000,5800000,5800000,5800000,5800000,5800000,4800001,4800000);
- pd[8][7] = memo(54888896,66000000,66000000,66000000,66000000,66000000,66000000,66000000,56000001,56000000);
- pd[8][8] = memo(628888897,740000000,740000000,740000000,740000000,740000000,740000000,740000000,640000001,640000000);
- pd[9][0] = memo(0,1,1,1,1,1,1,1,1,1);
- pd[9][1] = memo(9,19,19,19,19,19,19,19,19,10);
- pd[9][2] = memo(171,280,280,280,280,280,280,280,280,181);
- pd[9][3] = memo(2592,3700,3700,3700,3700,3700,3700,3700,3700,2701);
- pd[9][4] = memo(34893,46000,46000,46000,46000,46000,46000,46000,46000,36001);
- pd[9][5] = memo(438894,550000,550000,550000,550000,550000,550000,550000,550000,450001);
- pd[9][6] = memo(5288895,6400000,6400000,6400000,6400000,6400000,6400000,6400000,6400000,5400001);
- pd[9][7] = memo(61888896,73000000,73000000,73000000,73000000,73000000,73000000,73000000,73000000,63000001);
- pd[9][8] = memo(708888897,820000000,820000000,820000000,820000000,820000000,820000000,820000000,820000000,720000001);
- }
- void f(memo n) {
- for(int i = 0;i < 10;i++)
- printf("%d ",n.v[i]);
- puts("");
- }
- int p10(int x) {
- int res = 1;
- for(int i = 0;i < x;i++)
- res *= 10;
- return res;
- }
- memo calc(int x) {
- //puts("");
- memo res;
- int cnt = 0;
- if(x == 0)
- return pd[0][1];
- int ant = 0;
- while(x) {
- int aux = x%10;
- ///printf("%d %d: ",aux,cnt);
- //f(pd[aux][cnt]);
- res = res + pd[aux][cnt++];
- res.v[aux] += ant;
- ant += aux*p10(cnt-1);
- x /= 10;
- }
- //f(res);
- return res;
- }
- int main() {
- init();
- int x,y;
- while(1) {
- cin >> x >> y;
- if(!x && !y) break;
- memo r1 = calc(x-1);
- memo r2 = calc(y);
- //f(r1);
- //f(r2);
- for(int i = 0;i < 10;i++) {
- if(i)
- printf(" %d",r2.v[i]-r1.v[i]);
- else
- printf("%d",r2.v[i]-r1.v[i]);
- }
- puts("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement