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

25年1月-A组(萌新)- 云朵工厂

题目描述


世界各地的云朵都是由知名的云朵工厂克劳德生产的。
工厂的流水线正在加班加点的生产各种不同的云朵,不同种类的云朵会用不同的字母表示,云朵储备管道内目前已经有 N 朵云朵,工人们正在对其进行打包并分发到各个地区。同种类的云朵可以打包到一个打包袋,但是为了保证打包的密闭性,当管道中的下一朵为不同种类的云朵时,就必须把当前的打包袋封装起来,且不能再打开。
请帮工长计算一下一共需要多少个打包袋?

输入
第一行输入整数 N,表示云朵的数量。
第二行输入一个字符串 S,记录了云朵的种类。

输出
输出一个整数,表示打包袋的数量。

样例
输入
10
aaacccaaaddd
输出
4
输入
6
bbbbbb
输出
1
输入
20
xxzaffeeeeddfkkkkllq
输出
10

说明
样例 1 解释
这些云朵会被打包为 4 份,分别为 aaa、ccc、aaa、ddd 这 4 份。
样例 2 解释
所有云朵被打包为 1 份。
数据规模
有 20% 的数据,满足 1≤N≤10,且所有小写字母互不相同。
对于 100% 的数据,满足 1≤N≤10^5 ,且 S 仅由小写英文字母组成。

分析

为了计算云朵的打包袋数量,我们可以通过遍历给定的字符串(代表云朵的种类)来实现。我们的主要目标是统计字符串中相邻不同字符的数量,换句话说,我们要找出云朵种类的变化点。每当我们遇到一个不同的字符时,就意味着我们需要一个新的打包袋。

下面是具体的实现步骤:

  1. 初始化一个计数器,用于记录打包袋的数量。
  2. 遍历字符串,比较当前字符与前一个字符:
    • 如果当前字符与前一个字符不同,则增加打包袋的计数。
  3. 最后输出计数器的值。

代码

以下是 C++ 的实现代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int N; // 云朵的数量
    cin >> N; // 输入数量
    string S; // 云朵种类字符串
    cin >> S; // 输入云朵种类

    if (N == 0) {
        cout << 0 << endl; // 如果没有云朵,打包袋数量为0
        return 0;
    }

    int bag_count = 1; // 至少需要一个打包袋
    for (int i = 1; i < N; ++i) {
        if (S[i] != S[i - 1]) { // 如果当前字符与前一个字符不同
            bag_count++; // 增加打包袋计数
        }
    }

    cout << bag_count << endl; // 输出打包袋的数量
    return 0;
}

代码解释

  1. 输入处理
    • 读取云朵数量 N 和云朵种类的字符串 S
  2. 计算打包袋数量
    • 初始化 bag_count 为 1,因为至少需要一个袋子来装第一种云朵。
    • 遍历从第二个字符到最后一个字符,检查是否与前一个字符不同:
      • 如果不同,增加打包袋的数量。
  3. 输出结果
    • 最后输出打包袋的数量。

时间复杂度

这个方法的时间复杂度为 O(N),其中 N 是云朵的数量,这在给定的约束条件下是高效的。


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

相关文章:

  • 【最后203篇系列】007 使用APS搭建本地定时任务
  • 2025 = 1^3 + 2^3 + 3^3 + 4^3 + 5^3 + 6^3 + 7^3 + 8^3 + 9^3
  • wow-agent---task4 MetaGPT初体验
  • Greenplum临时表未清除导致库龄过高处理
  • Spring事务和事务传播机制
  • 5分钟带你获取deepseek api并搭建简易问答应用
  • 本地部署Deepseek R1
  • S价标准价与V价移动平均价的逻辑,以SAP MM采购订单收货、发票校验过程举例
  • 【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg
  • 【硬件测试】基于FPGA的QPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
  • 网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
  • Vim安装与配置教程(解决软件包Vim没有安装可候选)
  • 【make】makefile变量全解
  • DeepSeek-R1 本地部署模型流程
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》032-组件的Teleport功能
  • 练习(复习)
  • Nginx 安装配置指南
  • ESP32-S3模组上跑通esp32-camera(37)
  • 什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!
  • Java基础知识-第13章-Java多线程编程基础
  • 【BQ3568HM开发板】智能家居中控屏界面设计:打造便捷的家居控制体验
  • 阿里云 - RocketMQ入门
  • 蓝桥杯嵌入式uart,iic,adc_scan模版
  • js基础(黑马程序员)
  • 【Redis】List 类型的介绍和常用命令
  • AI时代:行动者胜,被动者汰