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

C/C++每日一练5

1.游游的 you

题意

游游有aybocu

  • 连续三个字符you→ 获得2 分(每组消耗 1y、1o、1u)
  • 连续两个字符oo→ 获得1 分

注意:ooo有两处相邻 oo,得 2 分;oooo得 3 分。也就是一段连续 k 个 o 能贡献k-1分。

求最多能拿到多少分数。 数据范围: \(1\le q\le 10^5,\quad 1\le a,b,c\le 10^9\)

贪心思路

  1. 最多能凑出k = min(a,b,c)you
    • 每组消耗 1 个 o,剩余 o 数量:rest_o = b - k
    • you 总分:k * 2
  2. 剩下的rest_o全部连成一串,能得到rest_o - 1分;如果rest_o < 2,oo 得分为 0。 \(\text{oo得分} = \max(rest_o - 1,\ 0)\)
  3. 总答案:\(ans = k\times2 + \max(b-k-1,\ 0)\)

⚠️ 数据极大,必须使用 long long!

C++ 完整代码

cpp

运行

#include <iostream> #include <algorithm> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int q; cin >> q; while (q--) { ll a, b, c; cin >> a >> b >> c; ll k = min({a, b, c}); ll ans = k * 2; ll rem = b - k; ans += max(rem - 1, 0LL); cout << ans << '\n'; } return 0; }

样例验证

输入:

plaintext

3 1 1 1 2 3 2 1 5 2
  1. a=1,b=1,c=1\(k=1,\;rem=0,\;ans=2+0=\boldsymbol{2}\)
  2. a=2,b=3,c=2\(k=2,\;rem=1,\;ans=4+0=\boldsymbol{4}\)
  3. a=1,b=5,c=2\(k=1,\;rem=4,\;ans=2 + (4-1)=\boldsymbol{5}\)

输出和样例完全一致:

plaintext

2 4 5

补充说明

很多人会疑惑:能不能少凑几组 you,腾出更多 o 拿更高 oo 分数? 简单证明: 一组 you 价值 2 分,消耗 1 个 o; 1 个 o 最多只能增加 1 分(oo)。 所以优先凑 you 永远最优,不存在牺牲 you 换取更多 oo 的情况。

2.腐烂的苹果(多源 BFS 经典题)

题目大意

有一个n × m的网格:

  • 0:空地
  • 1:新鲜苹果
  • 2:腐烂苹果

每一分钟,腐烂苹果会向上下左右四个方向扩散,相邻新鲜苹果变成腐烂。 求:全部苹果腐烂需要的最少时间; 如果最后还有新鲜苹果无法腐烂,输出-1

核心思路:多源广度优先搜索 BFS

  1. 初始把所有腐烂苹果同时入队(多个起点一起扩散)
  2. 逐层向外扩散,记录扩散耗时
  3. BFS 结束后遍历网格,若仍存在新鲜苹果 →-1,否则输出最大时间

C++ 完整代码

cpp

运行

#include <iostream> #include <queue> #include <vector> using namespace std; struct Node { int x, y, t; }; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; int main() { int n, m; cin >> n >> m; vector<vector<int>> g(n, vector<int>(m)); queue<Node> q; int apple = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> g[i][j]; if (g[i][j] == 2) { q.push({i, j, 0}); } else if (g[i][j] == 1) { apple++; } } } int maxTime = 0; while (!q.empty()) { auto cur = q.front(); q.pop(); int x = cur.x, y = cur.y, t = cur.t; maxTime = max(maxTime, t); for (int d = 0; d < 4; d++) { int nx = x + dx[d]; int ny = y + dy[d]; if (nx >= 0 && nx < n && ny >=0 && ny < m && g[nx][ny] == 1) { g[nx][ny] = 2; apple--; q.push({nx, ny, t + 1}); } } } if (apple > 0) cout << -1 << endl; else cout << maxTime << endl; return 0; }

关键点说明

  1. 多源 BFS 不能用 DFS:DFS 会串行扩散,无法模拟 “同时腐烂”,结果错误。
  2. 提前统计新鲜苹果总数,BFS 中每腐烂一个就减一,最后判断有无剩余。
  3. 边界:没有新鲜苹果时答案为0

Python 版本

python

运行

from collections import deque n, m = map(int, input().split()) grid = [] q = deque() cnt = 0 for i in range(n): row = list(map(int, input().split())) grid.append(row) for j in range(m): if row[j] == 2: q.append((i, j, 0)) elif row[j] == 1: cnt += 1 dirs = [(-1,0),(1,0),(0,-1),(0,1)] res = 0 while q: x, y, t = q.popleft() res = max(res, t) for dx, dy in dirs: nx = x + dx ny = y + dy if 0 <= nx < n and 0 <= ny < m and grid[nx][ny] == 1: grid[nx][ny] = 2 cnt -= 1 q.append((nx, ny, t+1)) print(res if cnt == 0 else -1)

3.孩子们的游戏(圆圈中最后剩下的数)

经典约瑟夫环问题

题目描述

0 ~ n-1n个小朋友围成一圈。 从数字 0 开始报数,报到m-1的小朋友出列,下一个继续从 0 开始报数。 不断循环,求最后剩下的小朋友编号。

公式推导(递推)

设: \(f(n)\) = n 个人时最后存活的位置 递推公式:

\(f(1) = 0\) \(f(n) = (f(n-1)+m) \bmod n\)

C++ 代码(迭代写法,推荐,无栈溢出)

cpp

运行

#include <iostream> using namespace std; int main() { int n, m; cin >> n >> m; int res = 0; for(int i = 2; i <= n; ++i) { res = (res + m) % i; } cout << res << endl; return 0; }

递归版本(便于理解,n 很大会栈溢出)

cpp

运行

int f(int n, int m) { if(n == 1) return 0; return (f(n-1,m) + m) % n; }

举个例子

n=5,m=3 序列:0,1,2,3,4

  1. 淘汰 2
  2. 淘汰 0
  3. 淘汰 4
  4. 淘汰 1 最后剩下 3 运行代码:输出 3 ✔

补充说明

  1. 如果题目中人编号从1 开始,最后答案res + 1
  2. 数据范围很大时(\(10^6\))迭代写法完全没问题;递归不要用
  3. 原理简单理解: 去掉一个人之后,把新环重新编号,逆推回原环坐标。
谢谢
http://www.jsqmd.com/news/1250337/

相关文章:

  • 2026年武汉德系豪车音响改装推荐:武汉来福汽车音响隔音,19年深耕赛事级技术奔驰宝马奥迪保时捷专改 - 品牌推荐观
  • 【RT-DETR涨点改进】TGRS 2026 | 卷积创新改进篇 | 引入 3DSBE 三维光谱瓶颈增强模块,增强模型对通道间互补信息的利用能力,助力高光谱目标检测、遥感目标检测任务,有效涨点
  • 震惊!这家企业竟让锚索冲击试验数据飙升300%!
  • 百元蓝牙耳机降噪方案解析:从ENC/ANC原理看三款入门机型参数对比
  • 9-SOFA_Collision Model(碰撞模型)与 Collision Pipeline(碰撞流水线)
  • AI学术写作助手:从智能大纲到文献矩阵
  • 【单片机毕业设计推荐】 基于 STM32 的智能婴儿监护床控制系统设计与实现 ,基于 STM32 的多传感婴儿看护装置设计(012203)
  • Day35|混合检索+重排序:RAG 召回率翻倍的正确姿势
  • 上海黄金回收正规资质筛查指南,普通人快速辨别靠谱渠道 - 日常比对手册
  • TVA驱动的具身智能迭代逻辑(17)
  • Docker进阶——多容器编排和机器人仿真环境搭建
  • AI 协作完整流程:从任务输入到可验证产出
  • labelme免费使用(不是下载exe文件)
  • CNAS认证测试报告:软件企业质量信任的基石
  • 业务智能体实战笔记:分层消除不确定性(五·终)|完全脱离 LLM 的确定性判定 + 评测闭环
  • 绮涛精密机械(上海)有限公司:长三角进口高端数控机床一站式解决方案服务商 - 品牌优选官
  • 2026宜宾本地家装行业装修公司靠谱口碑推荐,婚房全包装修/全屋适老化整装/出租房全屋简装高性价比落地方案 - 资讯速览
  • 网安必备的基础小知识
  • 抖音团购如何进入豆包AI推荐答案:本地生活商家的GEO获客指南
  • LLM到Agent的技术演进与核心组件解析
  • 免费查重网站哪个靠谱?2026年红黑榜实测,踩坑3次后的真心话
  • TDengine 2026 全面升级,中小企业全功能永久免费
  • 如何让智谱清言生成word文档?AI导出鸭苹果版将智谱清言的Markdown/LaTeX/Mermaid本地解析并转为标准docx,格式分毫不差。
  • 伟肯 NXI00136 水冷制动单元
  • TVA驱动的具身智能迭代逻辑(4)
  • 递归,分治,DFS,回溯的总结
  • 【finetuning】路由器微调案例分析
  • 【我的第一篇博客】
  • 财务大数据处理的基本流程是怎样的?财务大数据在风险管控中有什么用?
  • 椰林海鲜码头企业新愿景是什么?:守善求真务实 - 17328623207