acwing 每日一题4888. 领导者

目录

题目简述:

思路梳理:

总代码:


https://www.acwing.com/problem/content/description/4891/

题目简述:

有两个品种的奶牛,分别为G和H,我们要在每个品种中各找一头牛当领导者,最后输出全部的可能方案,当领导牛是有条件的,要么在其管辖范围内有其品种的全部牛,要不在其管辖范围内有另一品种牛的领导者;

思路梳理:

有一种很明显的思路:先判断在每头牛的管辖范围内有没有其品种的全部牛,如果有就代表这个牛能当领导牛,标记一下,在判断第二条件,因为第二个条件是依附于第一个条件而存在的,最后找出两种牛的各个领导牛的可能数,相乘即为答案;

这个思路很简单,但是代码实现较为复杂且易错,处理这些条件需要开三个前缀和数组,四个计数器,一个状态数组。。。(可能有其他更好的思路,但我只想到了这一个())

需要注意的是:分类讨论计算当前品种的奶牛的前缀和时,也要更新另一品种的前缀和,让另一品种的前缀和等于前一状态即可,要不会导致状态丢失(前缀和为0);【我因为这个调试了半天】

总代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
// s1 用于记录前缀位置中 'G'的数量,s2 用于记录前缀位置中 'H'的数量
// s3 用于记录领导牛的奶牛数量的前缀和
int s1[N], s2[N], s3[N]; 
int n, cnt1, cnt2, res1, res2; 
// n:奶牛总数;cnt1:根西牛('G')的总数;cnt2:荷斯坦牛('H')的总数
// res1:满足条件的根西牛领导者的可选数量;res2:满足条件的荷斯坦牛领导者的可选数量
char s[N]; // 存储每头奶牛的品种('G' 或 'H')
int a[N]; 
bool b[N]; // 标记某头奶牛是否已满足成为领导者的条件(条件一)int main() {cin >> n; // 输入奶牛的总数// 遍历每头奶牛,统计品种信息并计算前缀和for (int i = 1; i <= n; i++) {cin >> s[i]; // 输入第 i 头奶牛的品种if (s[i] == 'G') {// 更新根西牛的前缀数量,荷斯坦牛前缀数量不变,根西牛总数加 1s1[i] = s1[i - 1] + 1; s2[i] = s2[i - 1]; cnt1++; }if (s[i] == 'H') {//更新荷斯坦牛的前缀数量,根西牛前缀数量不变,荷斯坦牛总数加 1s2[i] = s2[i - 1] + 1; s1[i] = s1[i - 1]; cnt2++; }}// 处理每头奶牛写下的名单范围,判断是否满足条件一(名单包含其品种所有奶牛)for (int i = 1; i <= n; i++) {cin >> a[i]; if (s[i] == 'G') {// 判断该根西牛的名单是否包含所有根西牛if (s1[a[i]] - s1[i - 1] == cnt1) { res1++; // 根西牛领导者可选数量加 1b[i] = 1; // 标记该奶牛已满足条件s3[i] = s3[i - 1] + 1; // 更新满足条件的奶牛数量前缀和} else {s3[i] = s3[i - 1]; // 不满足条件,前缀和不变}}if (s[i] == 'H') {// 判断该荷斯坦牛的名单是否包含所有荷斯坦牛if (s2[a[i]] - s2[i - 1] == cnt2) { res2++; // 荷斯坦牛领导者可选数量加 1b[i] = 1; // 标记该奶牛已满足条件s3[i] = s3[i - 1] + 1; // 更新满足条件的奶牛数量前缀和} else {s3[i] = s3[i - 1]; // 不满足条件,前缀和不变}}}// 处理未标记的奶牛,判断是否满足条件二(名单包含另一品种的领导者)for (int i = 1; i <= n; i++) {if (b[i]) continue; // 已满足条件一,跳过// 判断该奶牛的名单中是否包含已满足条件的奶牛(即是否包含另一品种的领导者)if (s3[a[i]] - s3[i - 1] > 0) { if (s[i] == 'G') res1++; // 根西牛满足条件二else res2++; // 荷斯坦牛满足条件二}}cout << res1 * res2 << endl; // 输出满足条件的选择方案数量(根西牛与荷斯坦牛可选领导者数量的乘积)return 0;
}

细节探讨:

最后判断条件二的时候并没有分类讨论,满足条件一的奶牛是否和当前所枚举的奶牛相同,这样可以吗?答案是可以的;

 

例如此图,第2个G符合条件1,但它一定不会出现在第3个G的前缀和(s3[4]-s3[3-1])里,且题目数据里也标注了i<=ei<=n,所以无需担心判断条件2时,前缀和中有和自身相同品种的牛~~~~

(细不细~) 

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

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

相关文章

在Windows下VSCodeSSH远程登录到Ubuntu

Window用VSCode通过SSH远程登录Ubuntu SSH 服务开启Windows远程登录 SSH 服务开启 首先要确保 Ubuntu 的 SSH 服务开启了&#xff0c;开启 Ubuntu 的 SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu 开启 SSH sudo apt-get install openssh-serverWindows远…

软件性能测试中的“假阳性”陷阱

软件性能测试中的“假阳性”陷阱主要表现为错误警报频繁、资源浪费严重、测试可信度降低。其中&#xff0c;错误警报频繁是最常见且最严重的问题之一&#xff0c;“假阳性”现象会导致开发团队在解决不存在的问题上花费大量时间。据行业调查显示&#xff0c;超过30%的性能优化成…

AwesomeQt分享3(含源码)

AwesomeQt 这个项目包含了多个Qt组件的使用示例&#xff0c;旨在展示Qt各种强大功能的实现方式。 源码分享 github: awesome_Qtgitee: 后续同步 项目进度 QCustomPlot曲线控件示例 支持排序和筛选的列表控件示例 支持排序和筛选的表格控件示例 属性表示例 Dock窗口示例 自绘…

如何验证极端工况下的系统可靠性?

验证极端工况下系统可靠性的方法主要包括设计极限测试、环境应力筛选&#xff08;ESS&#xff09;、可靠性预测与建模。其中&#xff0c;设计极限测试最为关键&#xff0c;通过在试验中施加超过预期使用条件的应力&#xff0c;可以有效评估系统的真实承受能力和潜在弱点。这类测…

[计算机网络]网络I/O模型

欢迎来到啾啾的博客&#x1f431;。 这是一个致力于构建完善的Java程序员知识体系的博客&#x1f4da;&#xff0c;记录学习的点滴&#xff0c;分享工作的思考、实用的技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604;。…

MyBaitis-Plus 使用动态表名 selectPage 不生效

在使用 MyBatis-Plus 时&#xff0c;采用动态表名策略后&#xff0c;selectPage 方法无法正常生效。 MyBatis-Plus动态表名插件配置MyBatis-Plus动态表名失效原因MyBatis-Plus动态表名失效解决办法 MyBatis-Plus动态表名插件配置 以下是我项目中 MyBatis - Plus 的插件配置&am…

C语言基础—构造类型

数据类型 1.基本类型/基础类型 整型 短整型&#xff1a;short[int] --2字节 基本整型&#xff1a;int --4字节 长整型&#xff1a;long[int] --32位4字节/64位8字节 长长整型&#xff1a;long long [int] &#xff08;C99&#xff09; 注意&#xff1a;以上类型又都分为sig…

交流电机类型及其控制技术

交流电机可分为同步电机和异步电机两大种类&#xff0c;如果电机转子的转速与定子旋转磁场的转速相等&#xff0c;转子与定子旋转磁场在空间同步地旋转&#xff0c;这种电机就称为同步电机。如果电机转子的转速不等于定子旋转磁场的转速&#xff0c;转子与定子旋转磁场在空间旋…

「HTML5+Canvas实战」星际空战游戏开发 - 纯前端实现 源码即开即用【附演示视频】

纯前端实现星际空战游戏【简易版】 博主上次分享的简易版飞机大战收到了不少建议,今天再给大家来一波福利!带来全新升级的飞机大战进阶版!不仅拥有更丰富的游戏机制和更精美的游戏画面,还加入了超燃的BOSS战斗系统。源码完全免费开放,拿来即用无门槛,欢迎感兴趣的小伙伴…

7-项目负责人-添加产品

点击一个项目集&#xff0c;进入项目集的页面。可以进行产品、项目、人员和干系人的管理。 点击“添加产品”&#xff0c;为该项目集添加关联产品。一个项目集可以关联多个产品。还可以通过“产品线”管理一些列产品。 产品。

深度赋能!北京智和信通融合DeepSeek,解锁智能运维无限可能

在数字化飞速发展的今天&#xff0c;传统运维模式面临着设备规模激增、故障复杂度攀升、人工响应滞后等多重挑战。随着DeepSeek、腾讯元宝等AI大模型的兴起&#xff0c;为传统运维模式带来了新的变革。 北京智和信通基于DeepSeek大模型技术&#xff0c;将AI和运维场景深度融合&…

flex和bison笔记

文章目录 flex语法&#xff1a;定义部分:规则部分:flex全局变量&#xff1a;yyin: bison和flex联合编译: flex词法分析 bison语法分析 flex有两种使用方式&#xff0c;一种是flex单独做一个词法分析程序&#xff0c;另一种是flex和bison协同构建一个词法语法分析程序 我们在北…

rbpf虚拟机-call指令

文章目录 一、概述背景知识 二、call 指令的主要方法2.1 注册辅助函数2.2 执行辅助函数 三、完整代码示例与详解3.1 示例辅助函数3.2 测试虚拟机的 call 指令测试代码代码解析 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [rbpf虚拟机-call指令] ❤博主广交技术…

Java构造函数与普通函数

1.概解 tips&#xff1a; 1.声明函数主要用public/private&#xff0c;public可以在其他函数中访问。 2.public后面跟函数返回类型&#xff0c;void表示无返回值。 3.main函数是自动执行的构造函数&#xff0c;而其他函数除非被调用则不会被自动执行 运行结果&#xff1a…

MySQL: 创建两个关联的表,用联表sql创建一个新表

MySQL: 创建两个关联的表 建表思路 USERS 表&#xff1a;包含用户的基本信息&#xff0c;像 ID、NAME、EMAIL 等。v_card 表&#xff1a;存有虚拟卡的相关信息&#xff0c;如 type 和 amount。关联字段&#xff1a;USERS 表的 V_CARD 字段和 v_card 表的 v_card 字段用于建立…

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法&#xff0c;并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈&#xff1a; 做培训或者写文章&#xff…

六十天前端强化训练之第三十二天之Babel 转译配置大师级深度讲解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、核心概念与知识体系详解 1. Babel 工作原理全景解析 二、完整配置方案&#xff08;带详细注释&#xff09; 1. 进阶版 .babelrc 配置 2. Webpack 集成配置&#xff08…

Linux 下安装和使用 Jupyter Notebook

Jupyter Notebook / Lab 是 Python 开发和数据分析中不可或缺的工具。为了避免环境污染&#xff0c;推荐使用虚拟环境方式安装并启动它。本教程将教你如何&#xff1a; 安装 Python、pip、venv使用虚拟环境安装 Jupyter设置登录密码启动并远程访问编写一个一键启动脚本&#x…

【云成本优化案例】K8s计费探针让跨境电商企业节省30%云预算

01. 财务“谜案”&#xff1a;消失的30%云预算 "我们的K8s集群资源利用率高达78%&#xff0c;但业务部门总说云账单对不上。"某跨境电商企业CTO的报案记录&#xff0c;揭开了一场云原生时代的财务谜案。该企业技术团队自查了所有资源配额和HPA配置&#xff0c;却始…

PyTorch 分布式训练(Distributed Data Parallel, DDP)简介

PyTorch 分布式训练&#xff08;Distributed Data Parallel, DDP&#xff09; 一、DDP 核心概念 torch.nn.parallel.DistributedDataParallel 1. DDP 是什么&#xff1f; Distributed Data Parallel (DDP) 是 PyTorch 提供的分布式训练接口&#xff0c;DistributedDataPara…