字母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. TensorFlow从入门到入坑(1)

    初识TensorFlow 一.术语潜知 深度学习:深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法. 深度学 ...

  2. 从零开始的DIY智能家居 - 基于 ESP32 的智能浇水器

    前言 上次 土壤湿度传感器 完成之后,就立下一个 flag 要搭建一个智慧浇水的智能场景,现在终于有时间填坑了!(o゚▽゚)o 智慧浇水场景的核心设备有三个: 检测土壤状态的:土壤湿度传感器 通过这个 ...

  3. IM服务器:我的千万级在线聊天服务器集群

    一.服务器特点 01.傻瓜式部署,一键式启动: 02.单机支持10万以上在线用户聊天(8G内存,如果内存足够大,并发量可超过10万): 03.支持服务器集群,集群间高内聚.低耦合,可动态横向扩展IM服 ...

  4. 【JavaScript基础】Js的定时器(你想看的原理也在哟)

    [JavaScript基础]Js的定时器(你想看的原理也在哟) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 本章是经历 ...

  5. Linux 兴趣小组2016免试题 第四关揭秘

    Linux 兴趣小组2016免试题 点这里 首先贴出第四关链接Linux 兴趣小组2016免试题 第四关 第四关: 进入网址我们看到的是4张扑克牌K,这是什么意思? 要我斗地主?好了,还是乖乖的先查看 ...

  6. lombok标签之@Data @AllArgsConstructor @@NoArgsConstructor -如何去除get,set方法。@Data注解和如何使用,lombok

    在代码中我们可以只加上标签@Data 而不用get,set方法: val : 和 scala 中 val 同名, 可以在运行时确定类型; @NonNull : 注解在参数上, 如果该类参数为 null ...

  7. 关于Python中用户输入字符串(与变量名相同)无法作为变量名引用的理解以及解决方案

    在用户登录账号时,我需要在字典中查找是否存在其账号名称以及密码是否正确. 所以,我想将用户输入的账号赋值给变量,在字典中查找是否有此指值. 代码如下: 1 Ya = {'姓名': 'Ya', 'pas ...

  8. 菜鸡的Java笔记 生产者与消费者

    生产者与消费者        代码要求知道做什么用即可        线程间的通讯问题以及 Object 类的支持            基础模型        现在希望实现一种数据的生产和取出的操作 ...

  9. HMS Core Insights第八期直播预告--创新能力解读

    [导读] 在上个月举办的HDC2021华为开发者大会上,全新登场的HMS Core 6向大家展示了包括媒体.图形.连接与通信等领域的众多全新开放能力.如仅用一部RGB摄像头的手机即可完成的3D建模,在 ...

  10. C++的重载操作符(operator)介绍

    原文转载至:https://blog.csdn.net/liitdar/article/details/80654324 https://blog.csdn.net/liitdar/article/d ...