Advertisement
juanjo12x

UVA_12241_Digits_Count

Aug 17th, 2014
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <string>
  6. #include <cctype>
  7. #include <stack>
  8. #include <bitset>
  9. #include <queue>
  10. #include <list>
  11. #include <vector>
  12. #include <map>
  13. #include <set>
  14. #include <iterator>
  15. #include <sstream>
  16. #include <stdlib.h>
  17. #include <cmath>
  18. #define FOR(i,A) for(typeof (A).begin() i = (A).begin() ; i != (A).end() ; i++)
  19. #define debug( x ) cout << #x << " = " << x << endl
  20. #define clr(v,x) memset( v, x , sizeof v )
  21. #define all(x) (x).begin() , (x).end()
  22. #define rall(x) (x).rbegin() , (x).rend()
  23. #define TAM 110
  24.  
  25. using namespace std;
  26.  
  27. typedef pair<int,int> ii ;
  28. typedef long long ll ;
  29. typedef long double ld ;
  30. typedef pair<int,ii> pii ;
  31. int a,b;
  32. int valor[]={100000000, 1000000, 100000, 10000, 1000, 100, 10, 1};
  33. int init[]={  7000000,  600000,  50000,  4000,  300,  20,  1, 0};
  34. int dist[]  ={199999999, 1999999, 199999, 19999, 1999, 199, 19, 0};
  35. int maximo=8;
  36. int main() {
  37.     int rest;
  38.     while(scanf("%d %d",&a,&b)){
  39.         if(a==0 && b==0) break;
  40.         int res[10];
  41.         for(int i=0;i<10;i++) res[i]=0;
  42.         while(a<=b){
  43.             if(a==0){res[0]+=1;a++;continue;}
  44.             for(int i=0;i<maximo;i++){
  45.                 /*busca el rango correspondiente*/
  46.                 if(a >= valor[i] && a%valor[i] == 0 && b-a >= dist[i]){
  47.                      /* suma los valores iniciales */
  48.                     for (int j = 0; j < 10; j++)
  49.                         res[j] += init[i];
  50.  
  51.                     /* quitamos los n últimos digitos */
  52.                     rest = a/valor[i];
  53.  
  54.                     /* los dígitos que quedan suman al resultado */
  55.                     while (rest != 0) {
  56.                         res[rest%10] += valor[i];
  57.                         rest /= 10;
  58.                     }
  59.  
  60.                     /* el nuevo A */
  61.                     a += valor[i];
  62.  
  63.                     break;
  64.                 }
  65.             }
  66.         }
  67.         printf("%d", res[0]);
  68.         for (int i = 1; i < 10; i++)
  69.             printf(" %d", res[i]);
  70.         printf("\n");
  71.     }
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement