C. Dominant Character

news/2025/3/17 11:06:34/文章来源:https://www.cnblogs.com/yxcblogs/p/18776418

https://codeforces.com/contest/1605/problem/C

题意:给定一个长度为n的字符串s,s只包含字符abc,现问满足条件的字符串的最短长度是多少?要求长度至少为2。条件:a出现的次数严格大于b和c各出现的次数。

思路:考虑各种情况,假如有aa,那么答案就是2;有aba或者aca,答案就是3。有abca或acba,答案就是4。否则,无解?No,还有一种很恶心的,abbacca,答案为7。所以直接暴力破解,考虑长度不超过10的字符串,看是否有符合条件的即可。为什么大于7的字符串一定不是最优解?有点抽象,这跟a的出现方式有关,如果a中间出现了b跟c,而还要使用这个a,那么这个a一定对最终的答案是有贡献的,如果贡献太低,就不需要使用它。比如abbbaccabba,第一个a出现了一次,但是后面接了3个b,则这个a不考虑了,只考虑后面的a即可,此时c出现的次数为2。 所以说,如果a不是连续的,并且两个a中间出现了其他的字符,那么其他字符出现的次数不能超过3次,否则,使用前面的a将没有意义,毕竟a才出现了两次,中间夹了3个?不合理,所以a如果不连续,那么中间其他字符出现的次数最多为2次。

总结:一开始看错题了,看成了求长度最长的子串,写完发现让求最短的。理解题意后,考虑到了长度从2~3的字符串样式,但是忽略了4的,后面又发现长度还有7的字符串。。很搞的题!! 再补充一下,s.find_first_of真的很坑,不建议使用,不如用s.find(t, pos)。

/* this solution is for the longest substring...motherfucker
inline void solve(){int n;cin >> n;string s;cin >> s;set<pair<int, int>> sett;array<int, 3> cnt = {};int ans = -1;for (int i = 0; i < n; ++i) {cnt[s[i] - 'a'] ++;int cur = cnt[0] - max(cnt[1], cnt[2]);auto it = sett.lower_bound({-cur, 0});if (it != sett.end()) {ans = max(ans, i - it->second + 1);}sett.insert({cur, i});}cout << ans << '\n';
}*/inline void solve() {int n;cin >> n;string s;cin >> s;auto valid = [](string& ss) {if (ss.size() < 2) {return false;}array<int, 3> v = {};for (auto& c : ss) {v[c - 'a'] ++;}return (v[0] - max(v[1], v[2])) > 0;};int ans = INF;for (int i = 0; i < n - 1; ++i) {for (int j = 1; j < 10; ++j) {auto ss = s.substr(i, j);if (valid(ss)) {ans = min(ans, j);}}}if (ans == INF) {ans = -1;}cout << ans << '\n';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

011 App宽高铺满和Element-Plus的CS

1、让app的盒子沾满屏幕 首先我们给app一个底色 可以看到并没有占满 可以看到app在这个盒子里面 所以应该先让这个盒子占满 方法一:(应为需要改index.html,不推荐,但是可以看一下) 可以看到 方法二(推荐) 这段代码,用来设置元素的尺寸:width: 100vw;:width表示元素…

5. 创建一个栅栏布局组件-DeepSeek辅助编程

在deepseek中输入:创建一个vue组件 组件实现栅栏布局的功能 deepseek返回的代码: Row.vue<template><div class="grid-row":style="rowStyle":class="rowClass"><slot></slot></div> </template><scri…

突破卡脖子工程:6大信创项目管理平台横向测评

随着信息技术的快速发展,信创项目管理平台在推动我国信息技术创新和产业发展方面发挥着重要作用。为了帮助读者更好地了解和选择适合的信创项目管理平台,本文对 6 大信创项目管理平台进行了横向测评。 禅道——信创国产化项目管理解决方案 禅道是一款国产的项目管理软件,禅道…

夜莺监控如何对接飞书、飞书卡片发送告警

新版通知规则的介绍文章:夜莺监控巨大革新:抽象出通知规则,增强告警通知的灵活性 新版通知规则对接钉钉:夜莺监控 v8.0 新版通知规则 | 对接钉钉告警 新版通知规则对接企微:夜莺监控 v8.0 新版通知规则 | 对接企微告警本文对背景信息不做额外描述了,大家一定要先看看上面…

网络攻防实验三

1.实验内容 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? (2)动手实践Wireshark 使用Wireshark开源软件对在本机上以TELNET方式…

Debian:apt-get命令汇总

apt-get命令 是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行(常见的 10 个基于 Debian 的 Linux 发行版)都使用这个包管理系统。deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。语法 apt-get [OPTION] PACKAGE 选项 apt-get install…

Edge浏览器的设备仿真模式下显示鼠标指针

在使用Edge浏览器进行网页开发时,设备仿真模式是一个非常有用的工具,它可以帮助开发者模拟不同设备上的用户体验。但在设备仿真模式下,鼠标指针会显示为一个圆形触摸指示器,而不是我们熟悉的鼠标箭头,这可能会对精确测试鼠标交互造成影响。 改变方法 在设备仿真工具栏中,…

openmanus 代码分析 #2 - agent classes

根据你提供的 agent 目录下各个类的信息,下面是对应的 PlantUML 代码,用于绘制类图展示这些类之间的关系:@startuml定义抽象基类 abstract class BaseAgent {+ name: str+ description: Optional[str]+ system_prompt: Optional[str]+ next_step_prompt: Optional[str]+ l…

实践四:数据模型与数据库

实践四:数据模型与数据库 内容概述:本节课我们将引入数据模型(model),通过创建数据模型和数据表,我们就可以将信息存储在数据库中,并将数据库中的信息呈现在页面上。 1. 在完成实践一、实践二、实践三的基础上开始本项目,进入激活虚拟环境。pipenv shel提示:接下来我们…

clickhouse 开启认证 SQL 方式

ClickHouse 访问控制 RBAC 用户账户:包含身份信息、权限、允许的主机、角色和设置。 角色:权限容器,可分配给用户或其他角色。 行策略:定义表中行的可见性。 设置配置文件:集中管理用户/角色的配置参数。 配额:限制资源使用(如查询次数、内存)。 权限层级 权限按层级划…

No.66 Vue---Vue引入路由配置、路由传递参数、嵌套路由配置

一、Vue引入路由配置在Vue中,我们可以通过 vue-router 路由管理页面之间的关系 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举.1.1 在vue中引入路由 第一步:安装路由npm install -save vue-router第二步:配置独立的路由…

开源!Django-Vue3-Admin的Python后台管理系统

DjangoAdmin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了最新的前后端技术栈,内置了丰富的功能模块,可以帮助开发者快速搭建企业级中后台产品。Django-Vue3-Admin 项目简介 Django-Vue3-Admin 是一个基于 Django + Vue3 的前后端分离的后台管理系统,采用了…