字母A-J,用0-9对应字母使得n组数据和最大,输入字符串前面保证非0

如输入组数据:

2

ABC

BCA

输出:

1875

思路:其实就是求和,对应字符乘以相应的量级,按系数排序

如上MAX(101A+110B+11C)

那B:9 A:8,C:7产生最大和

同时考虑类型为字符串涉及字符串加法

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <math.h>
#define IMIN numeric_limits<int>::min()
#define IMAX numeric_limits<int>::max()
#define FR(i,n) for(int i=0;i<n;i++)
#define CLC(x) memset(x,0,sizeof(x))
#define FILL(x,c) memset(x,c,sizeof(x))
#define viter vector<int>::const_iterator
using namespace std;
string invert(string &src)
{
string newStr=src;
for(int i=src.length()-1,j=0; i>=0; --i,++j)
newStr[j]=src[i];
return newStr;
}
void inverse(string &s)
{
for(int i=0;i<s.size()/2;++i){
char tmp= s[i];
s[i] = s[s.size()-1-i];
s[s.size()-1-i] = tmp;
}
}
string intAdd(string &rs1,string &rs2)
{
string str1=invert(rs1);
string str2=invert(rs2);
if(str1.length()<str2.length())
str1.swap(str2); for(size_t i=0; i!=str2.length(); ++i)
{
char c1=str1[i];
char c2=str2[i];
int t=((int)c1-48)+((int)c2-48);
if(t>=10)
{
//进位
int x=t/10;
t%=10;
size_t n=i+1;
do
{
int t1=(int)str1[n]-48+x;
if(t1>=10)
{
str1[n]=(char)(t1%10+48);
++n;
}
else
{
str1[n]=(char)(t1+48);
}
if(n==str1.length())
{
str1+="1";
break;
}
x=t1/10;
}
while(x!=0); str1[i]=(char)(t+48);
}
else
{
str1[i]=(char)(t+48);
}
}
string &rstrResult=str1;
string strOut=invert(rstrResult);
return strOut;
} void init_map(map<char,double> &wmap)
{
for(char i='A';i<'K';++i)wmap[i]=0.1;
}
string get_max(vector<string> &vstr)
{
map<char,double> wmap;
init_map(wmap);
for(int i=0;i<vstr.size();++i)
{
double count =1.0;
for(int j=0;j<vstr[i].size();++j)//0对应个位,逆序
{ wmap[vstr[i][j]]=wmap[vstr[i][j]]+count;
count = count*10;
}
}
map<double,char> nmap;
map<char,double>::iterator it = wmap.begin();
while(it!=wmap.end()){
//cout<<"1="<<it->first<<" "<<it->second<<endl;
if(nmap.count(1.0/double(it->second))){
double dtmp=it->second-0.1;
while(nmap.count(1.0/double(dtmp)))dtmp=dtmp-0.1;
nmap[1.0/double(dtmp)]=it->first;
//cout<<"SEC1: "<<1.0/double(dtmp)<<"fir1:"<<it->first<<endl;
}
else {
//cout<<"SEC2: "<<1.0/double(it->second)<<" fir2:"<<it->first<<endl;
nmap[1.0/double(it->second)]=it->first;
}
it++;
}
map<char,char> idmap;
map<double,char>::iterator it0 = nmap.begin();
char num='9';
while(it0!=nmap.end()){
idmap[it0->second]=char(num);
cout<<idmap[it0->second]<<": "<<it0->second<<endl;
num = num-1;
it0++;
}
string res;
for(int i=0;i<vstr.size();++i)
{
inverse(vstr[i]);
for(int j=0;j<vstr[i].size();++j)
{
vstr[i][j]=idmap[vstr[i][j]];
}
cout<<vstr[i]<<endl;
res=intAdd(res,vstr[i]);
}
// inverse(res);
return res;
} int main()
{ int n;
while(cin>>n)
{
vector<string> vstr;
FR(i,n){
string stmp;
cin>>stmp;
inverse(stmp);
vstr.push_back(stmp);
}
cout<<get_max(vstr)<<endl;
}
return 0;
}

n组字母和最大的更多相关文章

  1. 信息安全-2:python之hill密码算法[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...

  2. Ubuntu下用NdisWrapper安装网卡驱动

    下面是一个简单全面的使用NdisWrapper的指南.这是从Beginning Ubuntu Linux, Second Edition中提炼出来的. 这份指南是第8章的一部分.该章给出了在Ubunt ...

  3. java 正则

    ava - 正则表达式 - Pattern - Matcher 2013-08-21 14:35 3325人阅读 评论(0) 收藏 举报  分类: JavaSE(30)  版权声明:本文为博主原创文章 ...

  4. Unique Morse Code Words

    Algorithm [leetcode]Unique Morse Code Words https://leetcode.com/problems/unique-morse-code-words/ 1 ...

  5. 【ARTS】01_07_左耳听风-20181224~1230

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. leetcode笔记(五)809. Expressive Words

    题目描述 Sometimes people repeat letters to represent extra feeling, such as "hello" -> &qu ...

  7. js面试之一个字符串中出现次数最多的字符是?出现几次?

    最近在找面试题的时候发现了许多有趣的题目,在这里用随笔记录下~ 关于“一个字符串中出现次数最多的字符...”这种问题在笔试题中出现的频率还是很高的,我自己也找到了几种方法处理 var str = &q ...

  8. 院校-美国:哈佛大学(Harvard University)

    ylbtech-院校-美国:哈佛大学(Harvard University) 哈佛大学(Harvard University),简称“哈佛”,坐落于美国马萨诸塞州波士顿都市区剑桥市,是一所享誉世界的私 ...

  9. HPU暑期集训积分赛2

    A. 再战斐波那契 单点时限: 1.0 sec 内存限制: 512 MB 小z 学会了斐波那契和 gcd 后,老师又给他出了个难题,求第N个和第M个斐波那契数的最大公约数,这可难倒了小z ,不过在小z ...

随机推荐

  1. Intellij IDEA 2021.2.3 最新版免费激活教程(可激活至 2099 年,亲测有效)

    ​ 申明,本教程 Intellij IDEA 最新版破解.激活码均收集与网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.如条件允许,建议大家购买正版. 本教程更新于:2021 年 10 月 ...

  2. spring security实现简单的url权限拦截

    在一个系统中,权限的拦截是很常见的事情,通常情况下我们都是基于url进行拦截.那么在spring security中应该怎么配置呢. 大致步骤如下: 1.用户登录成功后我们需要拿到用户所拥有的权限,并 ...

  3. 2021.8.3考试总结[NOIP模拟29]

    T1 最长不下降子序列 数据范围$1e18$很不妙,但模数$d$只有$150$,考虑从这里突破. 计算的式子是个二次函数,结果只与上一个值有关,而模$d$情况下值最多只有$150$个,就证明序列会出现 ...

  4. linux下的IO模型---学习笔记

    1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...

  5. webshell绕过D盾

    PHP常见的代码执行函数: eval() assert() preg_replace() create_function() array_map() call_user_func() call_use ...

  6. 黑客是如何利用DNS域传送漏洞进行渗透与攻击的?

    一.DNS域传送 DNS :Domain Name System 一个保存IP地址和域名相互映射关系的分布式数据库,重要的互联网基础设施,默认使用的TCP/UDP端口号是53 常见DNS记录类型: 1 ...

  7. 【java+selenium3】select 下拉选 (八)

    一.select 下拉框 1.下拉选的处理类:Select 如果页面元素是一个下拉框,我们可以将此web元素封装成Select对象. Select select = new Select(WebEle ...

  8. initNativeTransServiceId . ntrans:object componentId :-368613127 微信小程序

    二维码打开的页面是否存在 注意:体验版二维码默认路径是 pages/index/index 我的因为分包的原因调整了首页路径 所以路径是pages/tabBar/search/search 如果不是这 ...

  9. React 三大属性state,props,refs以及组件嵌套的应用

    React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ...

  10. docker安装pxc集群

      前言 现在mysql自建集群方案有多种,keepalived.MHA.PXC.MYSQL主备等,但是目前根据自身情况和条件,选择使用pxc的放来进行搭建,最大的好处就是,多主多备,即主从一体,没有 ...