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

蓝桥云客第 5 场 算法季度赛

题目:

2.开赛主题曲【算法赛】 - 蓝桥云课

问题描述

蓝桥杯组委会创作了一首气势磅礴的开赛主题曲,其歌词可用一个仅包含小写字母的字符串 S 表示。S 中的每个字符对应一个音高,音高由字母表顺序决定:a=1,b=2,...,z=26。字母越靠后,音高越高。

为了增强歌曲感染力,组委会希望从中选取一段子串作为副歌。该子串需满足以下条件:

  • 所有字母都必须唯一。

此外,若副歌包含“lanqiobe”的前缀(例如“l”、“la”、“lan”等),则可额外获得创作灵感加成:

  • “l”: 10 分
  • “la”: 20 分
  • “lan”: 30 分
  • “lanq”: 40 分
  • “lanqi”: 50 分
  • “lanqio”: 60 分
  • “lanqiob”: 70 分
  • “lanqiobe”: 80 分

注意:创作灵感加成只能加一次,且只加最高的那个分数。例如,如果副歌是“la”,只会加 20 分,而不会再加上 10 分。

副歌的感染力 = 所有字母对应的音高之和 + 最高的创作灵感加成。

现在,请你找出最佳副歌子串。若有多个满足条件的子串,则输出字典序最小的一个。

输入格式

第一行包含一个正整数 NN ( 1≤N≤2×105 ),表示字符串 S 的长度。

第二行包含一个仅由小写字母所组成的字符串 S,长度为 N。

输出格式

输出一个字符串,表示最佳副歌子串。如果有多个满足条件的子串,则输出字典序最小的那个。

样例输入

8
lbcaccla

样例输出

cla

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 136  |  总提交次数: 464  |  通过率: 29.3%

难度: 简单   标签: 模拟, 暴力

思路:

1.首先要找出不重复出现字符的字符,以每一个字符为结尾作为子串。

2.利用桶思维,发现出现重复的字符直接break

3.有八个对应字符串得分,我们可以从最大个的开始比较。因为只增加最大得分。

4.感染力和字符串的更新,字典序的比较是很基础的,用stl比较就不多说了。(注意:只有字符串长度一样时候才能直接比较)

代码如下:

#include <iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
using namespace std;
int n;
int ans = -1;  
string s;
string ans_s;
bool mem[30];
int main()
{

  cin >> n;
  cin >> s;
  for(int i = 0 ; i < n ; i++)
  {
	  memset(mem,false,sizeof(mem));
	  int sum = 0;
	  string sc;
	  for(int j = i ; j >= 0 ; j--)
	  {
	    int num = s[j] - 'a' + 1;
	    if(mem[num] == false)
	    {
	        mem[num] = true;
	        sc += s[j];
	        sum += num; 
	    }
	    else
	    break;
	  }
	  reverse(sc.begin(),sc.end());//由于子串是从后往前加,与正常的子串相反,所以要转置一下。
	    if (sc.size() >= 8 && sc.find("lanqiobe")!=string::npos)
	    sum += 80;
	    else if (sc.size() >= 7 && sc.find("lanqiob")!=string::npos)
	      sum += 70;
	    else if (sc.size()>=6 && sc.find("lanqio")!=string::npos) 
	    sum += 60;
	    else if (sc.size()>=5 && sc.find("lanqi")!=string::npos)
	     sum += 50;
	    else if (sc.size()>=4 && sc.find("lanq")!=string::npos)
	    sum += 40;
	    else if (sc.size()>=3 && sc.find("lan")!=string::npos) 
	    sum += 30;
	    else if (sc.size()>=2 && sc.find("la")!=string::npos) 
	    sum += 20;
//	    cout << "以" << i << "为结尾       "<<"出现的子串:" << sc << endl;
	    if(sum > ans)//感染力更大 
	    {
	    	ans = sum;
	    	ans_s = sc;
		}
		else if(sum == ans)//感染力相等,比较字典序 
		{
			if(sc.size() < ans_s.size())//比较长度 
			{
				ans_s = sc;
			}
			else if(sc.size() == ans_s.size() && sc < ans_s)
			{
				ans_s = sc;
			}
		}
	}
  
  
  cout << ans_s;
  // 请在此输入您的代码
  return 0;
}


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

相关文章:

  • 快速导入请求到postman
  • SQLite PRAGMA
  • 【后端面试总结】Golang可能的内存泄漏场景及应对策略
  • django中forms和modelform还有fields有什么区别和关系,作用分别是什么
  • 记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)
  • 请求方式(基于注解实现)
  • Meilisearch ASP.Net Core API 功能demo
  • 自动化测试脚本实践:基于 Bash 的模块化测试框架
  • 基于Springboot美食推荐商城系统【附源码】
  • 14. 以太网接口
  • linux-28 文本管理(一)文本查看,cat,tac,more,less,head,tail
  • Nginx 配置支持 HTTPS 代理
  • 计算机类-数据结构课程推荐
  • 《拉依达的嵌入式\驱动面试宝典》—操作系统篇(一)
  • Maven 仓库的分类
  • Cisco认证是Cisco公司建立的网络技术证书体系
  • C#解决浮点数精度丢失的问题(参考方案)
  • [DO374] Ansible 配置文件
  • 云服务器加了安全组端口还是无法访问
  • 一分钟学会文心一言API如何接入,文心一言API接入教程
  • 基于 JavaEE 的影视创作论坛
  • fitz获取pdf内容
  • 浅谈云计算04 | 云基础设施机制
  • 游戏引擎学习第78天
  • SmartScanner:智能化网络漏洞扫描的未来先锋
  • RAID储存技术