zoukankan      html  css  js  c++  java
  • 最大映射

    有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大?

    输入描述:

    每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不超过 12 且仅包含大写字母 A-J 的字符串。 n 不大于 50,且至少存在一个字符不是任何字符串的首字母。



    输出描述:

    输出一个数,表示最大和是多少。

    输入例子1:
    2
    ABC
    BCA
    输出例子1:
    1875
     1 #include<iostream>
     2 #include<string>
     3 #include<vector>
     4 #include<map>
     5 #include<math.h>
     6 #include<set>
     7 #include<algorithm>
     8 using namespace std;
     9 bool  cmp(pair<char,long long> a,pair<char,long long> b){
    10     return  a.second>b.second;
    11 }
    12 
    13 int main()
    14     {
    15     int n;
    16     map<char,long long> m;
    17     set<char>f;///保存首字母。首字母不能是0,即使首字母所占权重最小也不行。所以当10个字母都出现的话,需要把非首字母权重最小的字母设置为0
    18     string str;
    19   //  vector<string> input;
    20     
    21     while(cin>>n){
    22         for(int i=0;i<n;i++){
    23             cin>>str;
    24             int k=str.size();
    25             f.insert(str[0]);
    26             for(int i=0;i<k;i++){
    27                 m[str[i]]+=pow(10,k-i-1);
    28             }
    29         }
    30         vector<pair<char,long long>> v(m.begin(),m.end());
    31         sort(v.begin(),v.end(),cmp);
    32         int len=v.size();
    33         int j=len-1;
    34         while(len==10&&j>=0){
    35             if(f.find(v[j].first)==f.end()){
    36                 v.erase(v.begin()+j);
    37                 break;
    38             }
    39             else j--;
    40         }
    41         len=v.size();
    42         int start=9;
    43         long long sum=0;
    44         for(int i=0;i<len;i++){
    45             sum+=v[i].second*start;
    46             start--;
    47         }
    48         m.clear();
    49         v.clear();
    50         str.clear();
    51         cout<<sum<<endl;
    52      }
    53 }
  • 相关阅读:
    iOS设计模式:观察者
    Java面向接口编程小例子
    《The DeadLine》(《最后期限》) 读后感
    Codeforces Round #395 Div1的A题Timofey and a tree
    重写和强制转换再调用能编译但不能运行
    Java继承和静态-加载顺序
    C++之pair
    用Java面向对象思想实现一个微博的功能(未完)
    Java对象在内存图示
    Java中OOP对象和引用
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/7691641.html
Copyright © 2011-2022 走看看