首页 > 试题广场 >

名字的漂亮度

[编程题]名字的漂亮度
  • 热度指数:151403 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于给定由小写字母构成的字符串,定义字符串的“漂亮度”为该字符串中所有字母“漂亮度”的总和。
\hspace{15pt}每一个字母的“漂亮度”将由你来确定,具体规则如下:
\hspace{23pt}\bullet\,每一个字母的“漂亮度”为 126 之间的整数;
\hspace{23pt}\bullet\,没有两个字母的“漂亮度”相同。
\hspace{15pt}现在,你需要确定每个字母的“漂亮度”,以使得字符串的“漂亮度”最大。

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入一个长度为 1 \leqq {\rm len}(s) \leqq 10^4 、仅由小写字母构成的字符串 s


输出描述:
\hspace{15pt}对于每一组测试数据,输出一个整数,表示字符串的最大“漂亮度”。
示例1

输入

2
zhangsan
lisi

输出

192
101

说明

\hspace{15pt}对于第一组测试数据,其中一种最优的分配方案是:
\hspace{23pt}\bullet\,将字符 \texttt{`a'} 的漂亮度分配为 26
\hspace{23pt}\bullet\,将字符 \texttt{`n'} 的漂亮度分配为 25
\hspace{23pt}\bullet\,将字符 \texttt{`g'}, \texttt{`z'}, \texttt{`h'}, \texttt{`s'} 的漂亮度依次分配为 24 \sim 21
\hspace{23pt}\bullet\,其余字符随意分配;
\hspace{15pt}最终,得到字符串的“漂亮度”为 (26 + 25) \times 2 + (24 + 23 + 22 + 21) = 192

\hspace{15pt}对于第二组测试数据,其中一种最优的分配方案是:
\hspace{23pt}\bullet\,将字符 \texttt{`i'} 的漂亮度分配为 26
\hspace{23pt}\bullet\,将字符 \texttt{`l'} 的漂亮度分配为 25
\hspace{23pt}\bullet\,将字符 \texttt{`s'} 的漂亮度分配为 24
\hspace{23pt}\bullet\,其余字符随意分配;
\hspace{15pt}最终,得到字符串的“漂亮度”为 26 \times 2 + (25 + 24) = 101
头像 挖掘机斯基
发表于 2021-06-25 13:19:34
思路:1.开一个整型数组,统计字母出现的次数,下标对应字母ASCII码2.对字母出现次数排序3.计算漂亮度代码实现: import java.util.Arrays; import java.util.Scanner; public class Main { public static 展开全文
头像 人生苦短,但求成长
发表于 2022-01-26 15:57:25
while True:     try:         n = int(input())         for i in range(n):         展开全文
头像 牛客271438号
发表于 2021-10-26 15:01:49
#include<iostream> #include<algorithm> #include<vector> using namespace std; int main() { int d; while(cin>>d) { 展开全文
头像 法拉利201903231900848
发表于 2019-08-19 18:14:18
#其实就是计算出各个字母出现的次数,出现次数最多的字母的“漂亮度”最大(26),后面按次数依次递减 while True:     try:         n=int( 展开全文
头像 牛客969573159号
发表于 2021-10-05 17:19:01
while True: try: #获取输入的单词数量 N = int(input()) while N: #获取输入的单词 data = input() #去重存入字典 展开全文
头像 牛客590115824号
发表于 2021-10-27 10:36:48
while(n = readline()){ for(let i = 0; i < n; i++){ let str = readline() let map = new Array(26).fill(0); let res = 0; 展开全文
头像 恒成立
发表于 2021-04-09 21:06:03
import java.io.*; import java.util.*; public class Main{ public static void main(String[] args) throws Exception{ Scanner sc = new Scanne 展开全文
头像 今天也要好好努力
发表于 2021-07-23 22:10:52
题目可以转换为:输入一个字符串,每个字符对应一个分值,求字符串的最大总分值;由于题目并没有限制某个字符对应某个分值,因此可以应用贪心的思想,即将最高分值赋给出现次数最多的字符;因此问题的解决方案为:对字符串进行桶排序,我们只需要知道不同字符出现的次数,甚至都不需要知道次数对应的是什么字符;然后再将次 展开全文
头像 wangkeli3
发表于 2021-12-09 23:36:12
题意 给出一个由小写字母组成的字符串,找到一个数组{a1...a26}={1,2...261,2...261,2...26},使得∑i=1nai∗pi\sum_{i=1}^n a_i*p_i∑i=1n​ai​∗pi​最大,其中pip_ipi​是第i个字母出现的次数。 解答 容易发现由排序不等式,只需 展开全文
头像 卑微小王在线招聘
发表于 2020-05-06 13:51:28
牛客华为机试-名字的漂亮度 题目描述 给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。Input: 展开全文

问题信息

难度:
597条回答 39358浏览

热门推荐

通过挑战的用户

查看代码
名字的漂亮度