当前位置: 首页 > article >正文

传智杯 第六届-复赛-第二场-C

题目描述:

        小红有一个长度为 n 的字符串 s,仅包含小写字母,小红可以选出 k 个字符,组成一个新的字符串 t,对于 t 的每一个字符 ti,如果 ti在 t中出现的次数为 y,则小红会获得 y的分数,现在小红想知道,她最多能获得多少分。

输入描述:

        第一行两个整数 n,k,表示字符串 s 的长度和小红选出的字符个数。第二行一个字符串 sss,表示小红的字符串。(1≤k≤n≤10^5)

输出描述:

        输出一个整数,表示小红最多能获得的分数。

示例1

输入:

5 3
aabcc

输出:

5

说明:

        小红选出 "acc",第一个字符获得 1 分,第二个字符获得 2 分,第三个字符获得 2 分,一共获得 5 分。

解题思路: 

        由题可知,我们想要得到最大的分数,那么我们就需要每次选择个数最多的字符。所以我们在输入的时候就记录下每个字符出现的次数,然后将这些次数按照从大到小的顺序进行排序,这样就可以依次得到出现次数最大的字符。

代码:

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;

//排序
bool cmp(int a, int b)
{
	return a > b;
}

signed  main()
{
	//输入、记录每个字符的分数
	int n;   //字符个数
	int k;    //选出字符个数
	cin >> n >> k;
	char* arr1 = new char[n];    //字符
	int arr2[26] = {0};    //字符
	for (int i = 0;i < n;i++)
	{
		cin >> arr1[i];
		arr2[arr1[i] - 'a']++;    //对应字符的数量++
	}

	//排序
	sort(arr2, arr2 + 26,cmp);

	//依次选出字符
	int num = 0;   //加入的个数
	int count = 0;   //分数
	for (int i = 0;i < 26;i++)
	{
		if (num + arr2[i] <= k)   //可以全部加入
		{
			num += arr2[i];
			count = count + arr2[i] * arr2[i];
		}
		else   //部分加入
		{
			count = count + (k - num) * (k - num);
			num = k;
		}
		if (num == k)   //已加满
		{
			break;
		}
	}

	//输出
	cout << count << endl;

	system("pause");
}


http://www.kler.cn/a/382664.html

相关文章:

  • rabbitMQ RabbitTemplate 发送消息
  • 【C++刷题】力扣-#706-设计哈希映射
  • C++入门基础知识134—【关于C 库函数 - gmtime()】
  • PostgreSQL JOIN 操作深入解析
  • leetcode-5-最长回文子串
  • parseInt 是一个内置的 JavaScript 函数,用于将字符串转换为整数。
  • Vue全栈开发旅游网项目(8)-接口联调*2+用户登录
  • AI大模型如何重塑软件开发流程?
  • 工商业储能是什么,工商业储能有什么作用?
  • 作为一个前端开发者 以什么步骤学习后端技术
  • electron 设置最小窗口缩放
  • Java | Leetcode Java题解之第542题01矩阵
  • 高频面试题(含笔试高频算法整理)基本总结回顾32
  • RxJava最全面试题及参考答案
  • Linux qt下是使用搜狗輸入發
  • 全网最适合入门的面向对象编程教程:58 Python字符串与序列化-序列化Web对象的定义与实现
  • Android中Activity启动的模式
  • 算法——双指针
  • macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退
  • [项目] C++基于多设计模式下的同步异步日志系统
  • 【青牛科技】GC2803:白色家电与安防领域中 ULN2803 的卓越替代者
  • Laravel/Sail 中修改npm源的问题
  • 京津冀自动驾驶技术行业盛会|2025北京自动驾驶技术展会
  • WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查
  • RFID标签实现托盘智能化管理
  • 系统聚类的分类数确定——聚合系数法