A题 (A.go)

思路总结: 这道题要求判断一个整数中是否包含连续的两个'9'。

核心思路是将输入的整数转换为字符串,然后遍历这个字符串,检查是否存在相邻的两个字符都是'9'。如果找到了,就立即停止遍历并输出"YES";如果遍历完整个字符串都没有找到,则输出"NO"。

// ==========================================================
//                    POWERED BY GMJ
//                   2025-07-06 18:26
// ==========================================================
// Github:     https://github.com/Joker-0111-G
// CSDN:       https://blog.csdn.net/dl999666?type=blog
// Gmail:      joker0111gmj@gmail.com
// Author:     USER <joker0111gmj@gmail.com>
// FilePath:   ~/homegmj/GoCode/NK/20250706\A.go
// License:    MIT
// Copyright:  (c) 2025 JOKER. All rights reserved.
// ==========================================================
//    __  __    _  _____ _   _  ____ __  __     _
//    \ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//     \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//     /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//    /_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
// ==========================================================
// Project Description (use | for new lines)package mainimport ("fmt""strconv"
)func mainA() {var n intfmt.Scan(&n) s := strconv.Itoa(n)found99 := false for i := 0; i < len(s)-1; i++ {if s[i] == '9' && s[i+1] == '9' {found99 = true break       }}if found99 {fmt.Println("YES") } else {fmt.Println("NO")  }
}
B题 (B.go)

思路总结: 题目要求找到输入字符串中ASCII码最大的字符,并输出其ASCII码值。

解法非常直接:初始化一个变量ma为0,用来记录当前遇到的最大ASCII码。然后遍历输入字符串中的每一个字符,将其转换为对应的ASCII整数值。在遍历过程中,如果当前字符的ASCII值大于ma,就更新ma。遍历结束后,ma中存储的就是整个字符串中最大的ASCII码值,直接输出即可。

// ==========================================================
//                    POWERED BY GMJ                         
//                   2025-07-06 19:02
// ==========================================================
// Github:     https://github.com/Joker-0111-G
// CSDN:       https://blog.csdn.net/dl999666?type=blog
// Gmail:      joker0111gmj@gmail.com
// Author:     USER <joker0111gmj@gmail.com>
// FilePath:   ~/homegmj/GoCode/NK/20250706\B.go
// License:    MIT
// Copyright:  (c) 2025 JOKER. All rights reserved.
// ==========================================================
//    __  __    _  _____ _   _  ____ __  __     _
//    \ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//     \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//     /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//    /_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
// ==========================================================
// Project Description (use | for new lines)package mainimport ("bufio""fmt""os"
)func mainB() {reader := bufio.NewReader(os.Stdin)var T intfmt.Fscan(reader, &T) for t := 0; t < T; t++ {var n intfmt.Fscan(reader, &n) var s stringfmt.Fscan(reader, &s)ma := 0 for _, char := range s {as := int(char)if as > ma {ma = as}}fmt.Println(ma) }
}
C题 (C.go)

思路总结: 这道题的目标是构造一个由'4'和'8'组成的、总价值为k的最小数字。"4"的价值是1,"8"的价值是2。

为了让构造出的数字最小,位数应该尽可能少。因为'8'的价值(2)是'4'的价值(1)的两倍,所以应该优先使用'8'来减少位数。

具体策略是:

  1. k对2进行整除,商a表示需要多少个'8'。

  2. k对2取模,如果余数为1 (b=true),说明还需要一个价值为1的'4'。

  3. 为了使数字最小,较小的数字'4'应该放在较高的位(即最前面)。所以,如果需要'4',就先在结果中添加一个'4'。

  4. 然后,在后面追加a个'8'。

  5. 特殊情况:如果k=0,价值为0,无法用'4'或'8'表示,但题目可能要求输出一个有效数字,根据代码逻辑,此时输出'1'(可能是题目特定要求或默认值)。

// ==========================================================
//                    POWERED BY GMJ                         
//                   2025-07-06 19:04
// ==========================================================
// Github:     https://github.com/Joker-0111-G
// CSDN:       https://blog.csdn.net/dl999666?type=blog
// Gmail:      joker0111gmj@gmail.com
// Author:     USER <joker0111gmj@gmail.com>
// FilePath:   ~/homegmj/GoCode/NK/20250706\C.go
// License:    MIT
// Copyright:  (c) 2025 JOKER. All rights reserved.
// ==========================================================
//    __  __    _  _____ _   _  ____ __  __     _
//    \ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//     \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//     /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//    /_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
// ==========================================================
// Project Description (use | for new lines)package mainimport ("bufio""fmt""os""strings"
)func mainC() {reader := bufio.NewReader(os.Stdin)writer := bufio.NewWriter(os.Stdout)defer writer.Flush() var T intfmt.Fscan(reader, &T) for i := 0; i < T; i++ {var k intfmt.Fscan(reader, &k) if k == 0 {fmt.Fprintln(writer, 1) continue}a := k / 2b := (k % 2 == 1)var res strings.Builder if b {res.WriteByte('4') }for j := 0; j < a; j++ {res.WriteByte('8')}fmt.Fprintln(writer, res.String()) }
}
D题 (D.go)

思路总结: 这是一道数学或逻辑推导题。给定xp,需要计算一个结果。

通过分析代码逻辑 a := p / xb := p - a,我们可以推断这可能与某种分配或分组有关。 核心判断在于 p % x == 0

  • 如果 p 能被 x 整除,结果是 2*a - 1。这里的 a 就是 p/x

  • 如果 p 不能被 x 整除,结果是 2 * b。这里的 bp - p/x

这暗示了两种不同的计算场景。在能整除的情况下,可能存在某种合并或特殊状态,导致结果减1。在不能整除的情况下,则是基于p和商a的差值进行计算。解题的关键是理解这两种情况对应的具体数学模型。

// ==========================================================
//                    POWERED BY GMJ                         
//                   2025-07-06 19:10
// ==========================================================
// Github:     https://github.com/Joker-0111-G
// CSDN:       https://blog.csdn.net/dl999666?type=blog
// Gmail:      joker0111gmj@gmail.com
// Author:     USER <joker0111gmj@gmail.com>
// FilePath:   ~/homegmj/GoCode/NK/20250706\D.go
// License:    MIT
// Copyright:  (c) 2025 JOKER. All rights reserved.
// ==========================================================
//    __  __    _  _____ _   _  ____ __  __     _
//    \ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//     \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//     /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//    /_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
// ==========================================================
// Project Description (use | for new lines)package mainimport ("bufio""fmt""os"
)func mainD() {reader := bufio.NewReader(os.Stdin)writer := bufio.NewWriter(os.Stdout)defer writer.Flush() var T intfmt.Fscan(reader, &T) for i := 0; i < T; i++ {var x, p intfmt.Fscan(reader, &x, &p) a := p / x b := p - avar res intif p%x == 0 {res = 2*a - 1}else{res = 2 * b}fmt.Fprintln(writer, res) }
}
E题 (E.go)

思路总结: 这道题是一道动态规划(DP)问题。目标是求解对一个数组进行操作后,需要移除多少个只出现一次的元素。

问题可以转化为:最多能保留多少个只出现一次的元素。

我们定义DP状态:

  • dp0: 表示处理到第 i 个元素时,不选择第 i 个元素能保留的最多独特元素数量。

  • dp1: 表示处理到第 i 个元素时,选择第 i 个元素(前提是a[i]是独特元素且满足某种条件)能保留的最多独特元素数量。

状态转移方程: 遍历数组 a1n

  1. 计算 next_dp0 (不选当前元素 a[i-1]):

    • 可以从 dp0 (前一个也不选) 转移而来。

    • 也可以从 dp1 (前一个选了) 转移而来,只要满足不冲突的条件 (如 a[i-2] < i)。

    • next_dp0 = max(dp0, dp1_if_valid)

  2. 计算 next_dp1 (选择当前元素 a[i-1]):

    • 首先,a[i-1] 必须是只出现一次的元素。

    • 可以从 dp0 转移:dp0 + 1,需满足条件 (如 i-1 < a[i-1])。

    • 可以从 dp1 转移:dp1 + 1,需满足条件 (如 a[i-2] < a[i-1])。

    • next_dp1 = max(dp0_to_dp1, dp1_to_dp1)

遍历结束后,max(dp0, dp1) 就是最多能保留的独特元素数量 maxLen

最终答案是 总的独特元素数量 - maxLen

// ==========================================================
//
//	POWERED BY GMJ
//	2025-07-06 19:18
//
// ==========================================================
// Github:      https://github.com/Joker-0111-G
// CSDN:        https://blog.csdn.net/dl999666?type=blog
// Gmail:       joker0111gmj@gmail.com
// Author:      USER <joker0111gmj@gmail.com>
// FilePath:    ~/homegmj/GoCode/NK/20250706/E_fixed.go
// License:     MIT
// Copyright:   (c) 2025 JOKER. All rights reserved.
// ==========================================================
//
//	__  __    _  _____ _  _  ____ __  __     _
//	\ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//	 \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//	 /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//	/_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
//
// ==========================================================
package mainimport ("bufio""fmt""os""strconv"
)var (in     = bufio.NewScanner(os.Stdin)out    = bufio.NewWriter(os.Stdout)negInf = -1 << 30
)func init() {in.Split(bufio.ScanWords)
}func readInt() int {in.Scan()n, _ := strconv.Atoi(in.Text())return n
}func max(a, b int) int {if a > b {return a}return b
}func solve() {n := readInt()a := make([]int, n)freq := make(map[int]int)for i := 0; i < n; i++ {val := readInt()a[i] = valfreq[val]++}numTotalUnique := len(freq)isUnique := make(map[int]bool)for val, count := range freq {if count == 1 {isUnique[val] = true}}dp0 := 0dp1 := negInffor i := 1; i <= n; i++ {a_i := a[i-1]ndp0_from_dp0 := dp0ndp0_from_dp1 := negInfif i > 1 {if a[i-2] < i {ndp0_from_dp1 = dp1}}next_dp0 := max(ndp0_from_dp0, ndp0_from_dp1)next_dp1 := negInfif isUnique[a_i] {ndp1_from_dp0 := negInfif i-1 < a_i {ndp1_from_dp0 = dp0 + 1}ndp1_from_dp1 := negInfif i > 1 {if a[i-2] < a_i {ndp1_from_dp1 = dp1 + 1}}next_dp1 = max(ndp1_from_dp0, ndp1_from_dp1)}dp0 = next_dp0dp1 = next_dp1}maxLen := max(dp0, dp1)fmt.Fprintln(out, numTotalUnique-maxLen)
}func mainE() {defer out.Flush()t := readInt()for t > 0 {solve()t--}
}
F题 (F.go)

思路总结: 这道题要求在满足特定条件下找到一个最大的整数 h。条件是:n 可以表示为 m 个数 x_i 的和(n = x_1 + ... + x_m),其中每个 x_i 都大于等于 h,并且 x_ih 的按位与(bitwise AND)都为0。

核心思路是贪心 + 位运算检验

  1. 贪心策略: 从高位到低位(例如从第30位开始)尝试构建 h。我们希望 h 尽可能大,所以优先尝试将高位置为1。

  2. 构建过程:

    • 初始化答案 ans = 0

    • b = 300 循环。

    • 在每一位 b,我们尝试将 ans 的第 b 位置为1,形成一个临时的 h,即 h = ans | (1 << b)

  3. 检验可行性:

    • 将每个 x_i 分解为 h + y_i。因为 x_i & h == 0,所以 x_i >= h 等价于 y_i >= 0y_i & h == 0

    • 原方程 n = sum(x_i) 变为 n = sum(h + y_i) = m*h + sum(y_i)

    • 我们需要检验 rem = n - m*h (剩余部分) 是否能被分配到 my_i 中,同时满足 y_i >= 0y_i & h == 0

    • 这个检验过程由 check(rem, m, h) 函数完成。

  4. check函数逻辑:

    • 该函数通过从高位到低位逐位处理 rem 来判断分配是否可能。

    • 它维护一个 debt(债务)变量。对于 rem 的每一位,如果 h 的对应位是1,那么 y_i 的这一位必须是0,所以 rem 在这一位的1不能被分配,会累积成“债务”传递给更低的位。

    • 如果 h 的对应位是0,那么 y_i 的这一位可以是1,我们可以用这m个数来“偿还”债务。最多可以偿还 m

    • 如果在任何时候债务过大(溢出风险),或者到最后债务没有清零,则说明分配失败。

  5. 更新答案:

    • 如果 check 函数返回 true,说明将第 b 位置为1是可行的,我们更新 ans = h

    • 否则,保持 ans 不变,继续尝试下一位。

最终得到的 ans 就是满足条件的最大 h

// ==========================================================
//                    POWERED BY GMJ
//                   2025-07-06 19:25
// ==========================================================
// Github:     https://github.com/Joker-0111-G
// CSDN:       https://blog.csdn.net/dl999666?type=blog
// Gmail:      joker0111gmj@gmail.com
// Author:     USER <joker0111gmj@gmail.com>
// FilePath:   ~/homegmj/GoCode/NK/20250706\F.go
// License:    MIT
// Copyright:  (c) 2025 JOKER. All rights reserved.
// ==========================================================
//    __  __    _  _____ _   _  ____ __  __     _
//    \ \/ /   / \|_   _| | | |/ ___|  \/  |   | |
//     \  /   / _ \ | | | | | | |  _| |\/| |_  | |
//     /  \  / ___ \| | | |_| | |_| | |  | | |_| |
//    /_/\_\/_/   \_\_|  \___/ \____|_|  |_|\___/
// ==========================================================
// Project Description (use | for new lines)package mainimport ("bufio""fmt""os"
)// max devuelve el mayor de dos enteros int64.
func max(a, b int64) int64 {if a > b {return a}return b
}// check determina si 'rem' (el resto) se puede escribir como la suma
// de 'm' enteros no negativos, donde cada uno es bitwise ortogonal a 'h'.
func check(rem int64, m int64, h int64) bool {var debt int64 = 0 // 'debt' acumula la deuda desde los bits más significativos.// Iteramos desde un bit alto para manejar cualquier acarreo de forma segura.for j := 62; j >= 0; j-- {// Si ya no quedan bits en 'rem' y la deuda es cero, podemos parar.if debt == 0 && (rem>>j) == 0 {continue}// Si la deuda es demasiado grande, es imposible que se pague.// Esto previene el desbordamiento (overflow) de 'debt'.// 1<<62 es una cota segura que está por debajo del límite de int64.if debt >= (1 << 62) {return false}// Acumulamos la deuda, desplazándola e incluyendo el bit actual de 'rem'.debt = debt*2 + (rem>>j)&1// Si el bit j está "permitido" (h_j == 0), podemos usar nuestros 'm'// créditos para pagar la deuda.if (h>>j)&1 == 0 {debt = max(0, debt-m)}}// Si al final del proceso la deuda es cero, la distribución es posible.return debt == 0
}func mainF() {in := bufio.NewReader(os.Stdin)out := bufio.NewWriter(os.Stdout)defer out.Flush()var T intfmt.Fscan(in, &T)for t := 0; t < T; t++ {var n, m int64fmt.Fscan(in, &n, &m)var ans int64 = 0// Estrategia greedy: construir la respuesta desde el bit más significativo (30).for b := 30; b >= 0; b-- {h := ans | (1 << b)// Si m*h > n, es imposible. Usamos n/m para evitar desbordamientos.if h > n/m {continue}rem := n - m*h// Verificamos si este resto se puede distribuir correctamente.if check(rem, m, h) {// Si es posible, aceptamos este bit.ans = h}}fmt.Fprintln(out, ans)}
}

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

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

相关文章

红外图像小目标检测热力图可视化系统

原创代码&#xff0c;可以工程修改含界面。

供应链管理:指标评估方式分类与详解

一、指标评估方式分类与详解 评估维度评估方式核心方法适用场景示例数据来源内部数据评估从企业ERP、MES、CRM等系统提取生产、财务、客户等数据。成本、效率、质量等内部管理指标评估。生产成本数据&#xff08;MES系统&#xff09;、客户满意度&#xff08;CRM系统&#xff…

基于 Rust 的前端工具基本实现

1. Rust 环境安装 1.1. 安装 Rust Rust 提供了一个非常方便的安装工具 rustup,可以通过以下命令安装 Rust: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 这个命令会安装 Rust 编译器 rustc、包管理工具 cargo 以及其他相关工具。 1.2. 配置环境变量 …

大模型关键字解释

&#x1f4a1; 一、模型结构关键词 1. Transformer Transformer 是一种专门用来“理解文字”的神经网络结构。就像一个聪明的秘书&#xff0c;能同时看懂整段话的所有词之间的关系&#xff0c;而不是像老式模型那样一句一句读。 &#x1f449; 举例&#xff1a;以前的模型像…

空调和烘干机的使用

开关 制冷 选择上下扫风 那个就下来了 烘干机 电源键 长按3s以上直到菜单显示 选择小件 不要快烘 至少1个半小时 才可以烘干

极简的神经网络反向传播例子

我之前一直没搞清楚&#xff0c;神经网络为什么要求导&#xff1f;反向传播又是什么&#xff1f;于是到现在深究回来…… 本质就是拟合一个未知函数。 高中的数理统计就学过最小二乘法这种回归方法&#xff08;ŷ 代表自己的预测y&#xff0c;这个表达要记住&#xff09;&…

01-什么是强化学习

什么是强化学习 1. 定义 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种使智能体&#xff08;Agent&#xff09;通过与环境&#xff08;Environment&#xff09;不断交互&#xff0c;学习如何在不同情境下采取行动以获得最大化累积奖励的机器学习方法。 强…

淘宝直播数字人:音视频算法工程技术

本专题是我们打造智能数字人的部分实践总结。我们将探讨六大核心环节&#xff1a;LLM文案生产赋予数字人思考和内容生成能力&#xff0c;如同其“大脑”&#xff1b;LLM互动能力则聚焦对话逻辑与拟人化交流&#xff0c;是实现自然交互的关键&#xff1b;TTS&#xff08;语音合成…

MySQL回表查询深度解析:原理、影响与优化实战

引言 作为后端开发或DBA&#xff0c;你是否遇到过这样的场景&#xff1a; 明明给字段加了索引&#xff0c;查询还是慢&#xff1f;EXPLAIN一看&#xff0c;执行计划里type是ref&#xff0c;但数据量不大却耗时很久&#xff1f; 这时候&#xff0c;你很可能遇到了MySQL中常见的…

任务管理器看不到的内存占用:RAMMap 深度分析指南

前言&#xff1a;任务管理器看不到的内存真相 在日常使用 Windows 系统时&#xff0c;我们有时会遇到一种令人费解的情况&#xff1a; 刚刚开机&#xff0c;什么软件都没运行&#xff0c;系统内存却已经占用了 7&#xff5e;8 GB。 打开任务管理器一看&#xff0c;前几个进程加…

从传统仓库到智能物流枢纽:艾立泰的自动化蜕变之旅

在物流行业智能化浪潮中&#xff0c;艾立泰从依赖人工的传统仓库转型为智能物流枢纽&#xff0c;其自动化升级路径为行业提供了典型范本。​曾几何时&#xff0c;艾立泰仓库内人工搬运、纸质单据流转、手工盘点是常态&#xff0c;效率低下、差错率高、人力成本攀升等问题制约发…

408第三季part2 - 计算机网络 - 滑动窗口

理解 帧本质就是一堆二进制&#xff0c;后面会将帧的格式 流量控制就是 B&#xff1a;急急急急急急 A&#xff1a;别急 A控制B&#xff0c;B控制C&#xff0c;C控制D&#xff0c;但D无法控制A&#xff0c;这就是相邻节点 abc在发送的过程中发送完了 怎么才能继续发送呢 没…

RedHat高可用集群深度解析与优化

一、RHCS核心组件深度解析1. Corosync&#xff08;消息层&#xff09;通信机制改进说明&#xff1a; Totem协议采用环形令牌传递机制&#xff0c;在10节点以下集群中使用UDP/IP组播&#xff08;224.0.0.12&#xff09;&#xff0c;超过10节点建议改用UDP/UDP单播。典型配置示例…

为什么使用 XML Schema?

为什么使用 XML Schema? XML(可扩展标记语言)是一种广泛使用的标记语言,它被设计用来存储和传输数据。XML Schema 是一种用于定义 XML 文档结构的语言,它为 XML 文档提供了严格的验证机制。以下是使用 XML Schema 的几个主要原因: 1. 结构化数据定义 XML Schema 允许开…

ESP32蓝牙学习笔记

蓝牙 官网&#xff1a;https://www.bluetooth.com/zh-cn/learn-about-bluetooth/tech-overview/ 概述 分类&#xff1a;Bluetooth经典、Bluetooth低能耗(LE) GAP 通用访问配置文件(Generic Access Profile, GAP)简称GAP&#xff0c;该Profile保证不同的Bluetooth产品可以互…

C#扩展方法全解析:给现有类型插上翅膀的魔法

C#扩展方法全解析&#xff1a;给现有类型插上翅膀的魔法 在 C# 的类型系统中&#xff0c;当我们需要为现有类型添加新功能时&#xff0c;传统方式往往意味着继承、重写或修改源代码 —— 但如果是string、int这样的系统类型&#xff0c;或是第三方库中的密封类&#xff0c;这些…

YOLOv11在边缘计算设备上的部署与优化:从理论到实践

边缘计算与YOLOv11的融合背景 边缘计算的崛起与核心价值 边缘计算作为一种分布式计算范式&#xff0c;正深刻改变着人工智能应用的部署方式。其核心在于将数据处理从云端下沉到网络边缘&#xff0c;在靠近数据源的位置完成计算任务。根据国际数据公司&#xff08;IDC&#xf…

Solidity——pure 不消耗gas的情况、call和sendTransaction区别

/ pure: 纯纯牛马 function addPure(uint256 _number) external pure returns(uint256 new_number){ new_number _number 1; }不会消耗gas对吧。传的不是状态变量 你的理解基本对了&#xff0c;但我们来更严谨、深入地回答这个问题。 ✅ 你这段 pure 函数代码&#xff1a; …

柔性电路芯片赋能脑机接口:技术融合、应用突破与前景展望

柔性电路芯片赋能脑机接口:技术融合、应用突破与前景展望 一、引言 1.1 研究背景与意义 在科技飞速发展的时代,柔性电路芯片与脑机接口的融合展现出巨大的潜力,为医疗、科研等多个领域带来了新的机遇与变革。 从医疗领域来看,随着人口老龄化的加剧以及神经系统疾病患者…

全面解析存储芯片:从Flash到DDR、铁电、内存条与SD卡

一、存储芯片分类概述 存储芯片是电子设备中用于数据存储的核心组件&#xff0c;根据数据保存方式可分为 易失性存储器&#xff08;Volatile Memory&#xff09; 和 非易失性存储器&#xff08;Non-Volatile Memory&#xff09;。 类型代表芯片特点典型应用易失性存储器DRAM、…