mickypinata

USACO-T026: Preface Numbering

Nov 30th, 2021
650
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. ID: mickyta1
  3. TASK: preface
  4. LANG: C++
  5. */
  6.  
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9.  
  10. const int N = 7 + 5;
  11.  
  12. int np, ans[N];
  13. char str[N] = "IVXLCDM";
  14.  
  15. void AddRoman(int n){
  16.     int tmp;
  17.     if(n / 1000 > 0){
  18.         tmp = n / 1000;
  19.         ans[6] += tmp;
  20.         n %= 1000;
  21.     }
  22.     if(n / 100 > 0){
  23.         tmp = n / 100;
  24.         if(tmp == 9){
  25.             ++ans[6];
  26.             ++ans[4];
  27.         } else if(tmp == 4){
  28.             ++ans[5];
  29.             ++ans[4];
  30.         } else {
  31.             if(tmp >= 5){
  32.                 ++ans[5];
  33.                 tmp -= 5;
  34.             }
  35.             ans[4] += tmp;
  36.         }
  37.         n %= 100;
  38.     }
  39.     if(n / 10 > 0){
  40.         tmp = n / 10;
  41.         if(tmp == 9){
  42.             ++ans[4];
  43.             ++ans[2];
  44.         } else if(tmp == 4){
  45.             ++ans[3];
  46.             ++ans[2];
  47.         } else {
  48.             if(tmp >= 5){
  49.                 ++ans[3];
  50.                 tmp -= 5;
  51.             }
  52.             ans[2] += tmp;
  53.         }
  54.         n %= 10;
  55.     }
  56.     tmp = n;
  57.     if(tmp == 9){
  58.         ++ans[2];
  59.         ++ans[0];
  60.     } else if(tmp == 4){
  61.         ++ans[1];
  62.         ++ans[0];
  63.     } else {
  64.         if(tmp >= 5){
  65.             ++ans[1];
  66.             tmp -= 5;
  67.         }
  68.         ans[0] += tmp;
  69.     }
  70.     return;
  71. }
  72.  
  73. int main(){
  74.     freopen("preface.in", "r", stdin);
  75.     freopen("preface.out", "w", stdout);
  76.  
  77.     scanf("%d", &np);
  78.     for(int i = 1; i <= np; ++i){
  79.         AddRoman(i);
  80.     }
  81.     int upb;
  82.     for(upb = 6; upb >= 0; --upb){
  83.         if(ans[upb] > 0){
  84.             break;
  85.         }
  86.     }
  87.     for(int i = 0; i <= upb; ++i){
  88.         cout << str[i] << ' ' << ans[i] << '\n';
  89.     }
  90.  
  91.     fclose(stdin);
  92.     fclose(stdout);
  93.     return 0;
  94. }
  95.  
RAW Paste Data