• Preface Numbering


    链接

    分析:先打表需要用到的罗马数字,然后暴力转换,最后统计一下即可

     1 /*
     2     PROB:preface
     3     ID:wanghan
     4     LANG:C++
     5 */
     6 #include "iostream"
     7 #include "cstdio"
     8 #include "cstring"
     9 #include "string"
    10 #include "map"
    11 using namespace std;
    12 const int maxn=4000;
    13 char s[]={'I','V','X','L','C','D','M'};
    14 int  h[]={1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000,2000,3000};
    15 int n;
    16 struct Node{
    17     int x;
    18     string str;
    19 };
    20 Node p[maxn];
    21 map<int,string> mp;
    22 void init(){
    23     mp[1]="I",mp[2]="II",mp[3]="III",mp[4]="IV",mp[5]="V",mp[6]="VI",mp[7]="VII",mp[8]="VIII",mp[9]="IX";
    24     mp[10]="X",mp[20]="XX",mp[30]="XXX",mp[40]="XL",mp[50]="L",mp[60]="LX",mp[70]="LXX",mp[80]="LXXX",mp[90]="XC";
    25     mp[100]="C",mp[200]="CC",mp[300]="CCC",mp[400]="CD",mp[500]="D",mp[600]="DC",mp[700]="DCC",mp[800]="DCCC",mp[900]="CM";
    26     mp[1000]="M",mp[2000]="MM",mp[3000]="MMM";
    27 }
    28 string solve(int num){
    29     string res="";
    30     while(num){
    31         int pos=-1;
    32         for(int i=29;i>=0;i--){
    33             if(num>=h[i]){
    34                 pos=i; break;
    35             }
    36         }
    37         int mod=num/h[pos];
    38         for(int i=1;i<=mod;i++){
    39             num-=h[pos];
    40             res+=mp[h[pos]];
    41         }
    42         //num-=h[pos];
    43         //res+=mp[h[pos]];
    44     }
    45     return res;
    46 }
    47 map<char,int>mr;
    48 int main()
    49 {
    50     freopen("preface.in","r",stdin);
    51     freopen("preface.out","w",stdout);
    52     cin>>n;
    53     init();
    54     for(int i=1;i<=n;i++){
    55         p[i].x=i;
    56         p[i].str=solve(i);
    57         //cout<<i<<": ";
    58         //cout<<p[i].str<<endl;
    59     }
    60     for(int i=1;i<=n;i++){
    61         for(int j=0;j<p[i].str.length();j++){
    62             mr[p[i].str[j]]++;
    63         }
    64     }
    65     for(int i=0;i<7;i++){
    66         if(mr[s[i]]==0)  continue;
    67         else{
    68             cout<<s[i]<<" "<<mr[s[i]]<<endl;
    69         }
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    P4009 汽车加油行驶问题
    P2761 软件补丁问题
    P1251 餐巾计划问题
    P2766 最长不下降子序列问题
    P4011 孤岛营救问题
    P2765 魔术球问题
    P2770 航空路线问题
    P2762 太空飞行计划问题
    P2764 最小路径覆盖问题
    P3355 骑士共存问题
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7193815.html
Copyright © 2020-2023  润新知