[USACO25FEB] Bessie‘s Function G 题解

QCustomPlot实现毫秒级时间轴数据的动态可视化与实时刷新优化 本文深入探讨了如何利用QCustomPlot库高效实现毫秒级时间轴数据的动态可视化与实时刷新。文章从基础配置讲起,详细介绍了时间轴初始化、数据平滑滚动、增量更新与内存管理等核心优化技巧,并分享了应对高频数据的缓冲策略及OpenGL硬件加速等高级优化手段,旨在解决实时图表卡顿问题,提升流畅度。 阅读详情

强烈建议更好的阅读体验

题目传送门

洛谷P11842
USACO题目
USACO题解

前言

本文为作者在参考多篇题解后觉得个人难以读懂(主要原因为作者太菜细节缺失),本文将通过配图来解决无法读懂这一问题。

题意简述

给定 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1​,a2​,⋯,an​ 以及修改每个 a i a_i ai​ 的代价 c i c_i ci​ ,希望通过对于每个 i i i ,都有 a i = a a i a_i=a_{a_i} ai​=aai​​

为了方便给出两组样例及配图(蓝字为有向边终点的修改权值)

样例1

输入
5
2 4 4 5 3
1 1 1 1 1
输出
3
图

image

说明

将 a 1 , a 4 , a 5 a_1,a_4,a_5 a1​,a4​,a5​ 分别改为 1 , 4 , 5 1,4,5 1,4,5后,我们得到
image

样例2

输入
8
1 2 5 5 3 3 4 4
9 9 2 5 9 9 9 9
输出
7
图

image

思路

基环树版子题。
我们想到对于每组 a i a_i ai​ ,都建立一条从 a i a_i ai​ 到 i i i 的单向边,并定义 a i a_i ai​ 为 i i i 的父亲。
这样一来,题目条件变为,从一个点 i i i 出发,其父亲等于其祖父,换句话说,从一个点 i i i 出发,逆箭头走一步等于再走一步。
进一步地, 要么 i i i 为自环,要么 a i a_i ai​( i i i 的父亲) 为自环。
显然若 i i i 不满足条件,将 a i a_i ai​ 修改为 i i i 最划算。此处多题解都有证明,本处不再赘述。
由上图,显然这是一个外向基环树森林(每个点有且仅有一条入边),例如上图在每个联通块的环中删掉一条边后,根节点有 1 , 2 , ( 3  or  5 ) 1,2,(3\ \text{or}\ 5) 1,2,(3 or 5)。不妨设整张图联通,否则可以按不同联通块考虑。

基环树典型操作:从环上选一边特判,然后树形dp剩下的两颗树。(很玄学看不懂就别看了)

本题中,我们按照USACO的思路讨论两种情况(Subtask3和Subtask4)
Subtasks:

  • Input 3: N ≤ 20 N≤20 N≤20
  • Inputs 4-9: a i ≥ i a_i≥i ai​≥i
  • Inputs 10-15: All a i a_i ai​ are distinct.
  • Inputs 16-21: No additional constraints.

Subtask 3

Subtask3(Inputs4-9)中,每个 a i a_i ai​ 都大于等于 i i i,这保证了图上除了自环不存在其他环1,
例如(USACO样例太大,此处为作者自制):

7
1 3 4 6 5 7 7
1 1 1 1 1 1 1

图:
image

手玩几组数据,我们注意到好吧图画出来还真挺显然的,整张图上所有连通块不是自环就是“一颗树”,但是树的根节点是个自环。
对于所有自环的(如上图就是 1 , 5 , 7 1,5,7 1,5,7,是的,基环树上的自环也算),直接把 c i c_i ci​ 修改为 0 0 0,这样方便后面累加修改值和树形dp初始化时不用讨论。

树形dp

设 d p i , 0 dp_{i,0} dpi,0​ 表示以 i i i 为根的子树修改最小值,其中 i i i 不作修改。
设 d p i , 1 dp_{i,1} dpi,1​ 表示以 i i i 为根的子树修改最小值,其中 i i i 作修改,修改 a i = i a_i=i ai​=i。
设 u u u 的儿子集合为 son u \text{son}_u sonu​,
则我们有

  1. 若根不作修改,则根的儿子必须修改。因此
    d p i , 0 = ∑ j ∈ son i d p j , 1 dp_{i,0}=\sum_{j\in{\text{son}_i}}dp_{j,1} dpi,0​=∑j∈soni​​dpj,1​
  2. 若根作修改,则根的儿子可修可不修。因此
    d p i , 1 = c i + ∑ j ∈ son i min ⁡ { d p j , 0 , d p j , 1 } dp_{i,1}=c_i+\sum_{j\in{\text{son}_i}}\min\{dp_{j,0},dp_{j,1}\} dpi,1​=ci​+∑j∈soni​​min{dpj,0​,dpj,1​}

从根开始递归计算即可,注意要特判掉回到根节点的那条边,防止重复计算。
最后的答案应为 d p i , 1 dp_{i,1} dpi,1​,因为根节点应为一个自环,必须修改

代码2:

int dfs(int u, int root)
{
    dp[u][0] = 0;
    dp[u][1] = c[u];
    for (auto v: son[u]) {
        if (v == root) continue;
        dfs(v, root);
        dp[u][0] += dp[v][1];
        dp[u][1] += min(dp[v][0], dp[v][1]);
    }
    return dp[u][1];
}

Subtask 4

Subtask4(Input10-15)中,每个 a i a_i ai​ 都不同。
例如(此处同为作者自制):

7
5 2 4 6 1 7 3
1 1 1 1 1 1 1

看图:
image
显然,整个图上的联通块都是环。至于证明,留给读者自证好了(逃)。
怎么解决环上问题呢?
首先特判自环。
剩下的环中,随便选一条边,然后就又双叒叕★注意到★这谁注意得到啊喂在此边的最终解决方案里,至少有一个点需为自环(FAQ:可是两个点都为自环会浪费吧 ANS:这个显然树形dp会在枚举一端点时考虑到要不要修改另一端点的,因此此处不需考虑)。
那么,我们分别求出将此边上两端点修改为自环后,以其为根节点做树形dp的代价,然后取最小值。
例如,对于上图来说,3到7这一条边,我们直接选择3作根节点树形dp(此处不需要修改是因为树形dp的深搜会自动考虑该情况的),得到结果等于对于(3->7->6->4)这一棵树的dfs结果,也就是2,对于7我们得到同样的结果,因此答案为2,累加到总答案上。

合并两个Subtask

我们再来看这张图:
image
其中含有的环可以用Subtask4的思路,随便选一条边,将其分开树形dp:
image
自认为此解比USACO官方的分类讨论简单点:

Full Solution:
We can combine the ideas from subtask 3 and 4
. For each component, locate the cycle using Floyd’s Algorithm or DFS. If the cycle’s length is 1, we can just use the solution from subtask 3
. Otherwise, use the idea from subtask 4 to convert the cycle into 2 instances of a rooted tree and solve each with subtask 3’s solution.
大意:将环做法和树做法融合。每次先用Floyd算法或深搜找环,然后判环的长度。若为1,直接树形dp。否则,用Sub4的思想,断环为两树,再套sub3的做法。

VS 我的改进

对于每个联通块直接找环,然后不管环的长度直接断环为链,如果是自环无影响,因为一开始就初始化 c[自环点]=0 了

正确性证明:

如何保证这样一定涵盖了最优解呢?
接下来纯粹讨论一下断环为链的做法没有遗漏的原因。
首先证明若环上一边的两点中皆无自环,则一定不合法。
证:设此边起点为x,则x的父亲即此边终点,若两者皆不是自环则根据定义不合法。Q.E.D.
然后,就讨论两点的修改这步,我们是分开讨论,互不影响,没有任何问题。由于保证了这条边的合法性,所以得到
这条:此边在图中等于不存在,无需考虑。因此,原来的恶心基环树变成了一个热情的小哈可爱的树,终于可以正常树形dp辣

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
int n, a[N];
vector<int> son[N]; // a[i]的反函数
int c[N]; // 修改a[i]的代价
int r1, r2; // a[r1] = r2
bool vst[N];
int dp[N][2]; // 子树根为u,a[u]!=u(0)或a[u]==u(1)的最小代价
void find_loop(int u, int rt)
{
	vst[u] = 1;
	for (auto v: son[u]) {
		if (v == rt) {
			r1 = v;
			r2 = u;
			return ;
		}
		if (vst[v]) continue;
		find_loop(v, rt);
	}
}
int dfs(int u, int rt)
{
	dp[u][0] = 0;
	dp[u][1] = c[u];
	for (auto v: son[u]) {
		if (v == rt) continue;
		dfs(v, rt);
		dp[u][0] += dp[v][1]; // a[u]!=u,所以a[v]必须等于v
		dp[u][1] += min(dp[v][0], dp[v][1]); // a[u]==u,所以a[v]可以等于v或不等于v
	}
	return dp[u][1];
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i];
		son[a[i]].push_back(i);
	}
	// 需满足条件:对于任意i,a[a[i]]=a[i]
	// 显然将a[i]修改为i最划算
	for (int i = 1; i <= n; ++i) {
		cin >> c[i];
		// is indempotent
		if (a[i] == i) c[i] = 0;
	}
	int ans = 0;
	for (int i = 1; i <= n; ++i) {
		// for each component, locate the loop use dfs
		if (vst[i]) continue;
		r1 = r2 = 0;
		find_loop(i, i);
		if (r1 == 0) continue; // no loop
		// choose any arbitrary edge in the loop
		// break the edge and make the two vertices indempotent
		int res1 = dfs(r1, r1);
		int res2 = dfs(r2, r2);
		ans += min(res1, res2);
	}
	cout << ans << '\n';
	return 0;
}

后记

作者制作不易,如果您读懂或觉得有帮助,请留个赞再走qwq
否则,也请您指出不足之处,谢谢!


  1. 证明:假设环由 a x 1 → x 1 = a x 2 → x 2 = a x 3 → ⋯ x k − 1 = a x k → x k = a x 1 a_{x_1}\rightarrow x_1=a_{x_2}\rightarrow x_2=a_{x_3}\rightarrow\cdots x_{k-1}=a_{x_k}\rightarrow x_k=a_{x_1} ax1​​→x1​=ax2​​→x2​=ax3​​→⋯xk−1​=axk​​→xk​=ax1​​ 构成,则显然 a x 1 ≥ x 1 = a x 2 ≥ ⋯ x k − 1 = a k ≥ x k = a x 1 ⟹ x 1 ≥ x k ≥ x 1 ⟹ x 1 = x k a_{x_1}\geq x_1=a_{x_2}\geq\cdots x_{k-1}=a_{k}\geq x_k=a_{x_1}\Longrightarrow x_1\geq x_k\geq x_1\Longrightarrow x_1=x_k ax1​​≥x1​=ax2​​≥⋯xk−1​=ak​≥xk​=ax1​​⟹x1​≥xk​≥x1​⟹x1​=xk​,即此环上起点等于终点,所以此环长度为1,为自环。 ↩︎

  2. 注意,本文除了最后贴上AC代码,其余代码都为作者写博时手敲,不保证正确性。 ↩︎

5.1 滑模控制(SMC)及其改进 本文系统阐述了滑模控制(SMC)的基本原理及其在永磁同步电机(PMSM)控制系统中的应用。首先介绍了滑模控制的核心思想,包括滑模面设计和不连续控制律,其强鲁棒性使其在电机控制领域得到广泛应用。其次分析了SMC在PMSM速度控制器和无位置传感器观测器中的具体实现方案。重点探讨了SMC固有的抖振问题,详细比较了边界层法、高阶滑模和自适应方法等多种改进策略的优缺点。最后指出改进SMC的研究趋势是多种策略的融合应用,如自适应高阶滑模等,以在保持鲁棒性的同时有效抑制抖振。 阅读详情

相关推荐

保姆级教程:用torch.profiler给你的vLLM推理做个“全身体检”(附Perfetto可视化分析)

本文提供了一份详细的vLLM推理性能分析教程,通过torch.profiler和Perfetto工具链实现从数据采集到可视化分析的全流程。文章涵盖了环境配置、性能数据采集、trace文件解析以及Perfetto可视化分析,帮助开发者优化大模型推理服务的性能,显著降低计算资源消耗。

weixin_29041767的博客 357

B. All Distinct

time limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputSho has an array aa consisting of nn integers. An operation consists of choosing two distinct indices ii and jj and removing aiai and ajaj from the array.F

无知的我 492

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 237

从仿真到实物:Realsense D435+ROS2焊接机械臂的视觉标定与数据验证指南

本文详细介绍了如何将Realsense D435相机与ROS2焊接机械臂从仿真环境迁移到实物部署的全过程。通过视觉标定、数据验证和焊接场景优化,确保系统在真实环境中精准可靠。重点讲解了硬件配置、驱动优化、数据一致性验证及焊接应用的特殊处理,为工业自动化开发者提供实用指南。

weixin_28701593的博客 407

产品竞争策略方法论:构建“差异化 + 结构化 + 系统化”的竞争优势

本文系统探讨了IoT产品竞争策略,指出当前企业普遍存在硬件能力强但商业竞争能力不足的问题。文章构建了五层竞争模型(产品层、体验层、服务层、数据层、生态层),提出五大核心竞争策略(成本领先、差异化竞争、聚焦竞争、生态竞争、数据驱动竞争),并详细阐述了差异化设计方法。通过行业案例分析(小米、苹果、特斯拉)和五步落地方法,强调从硬件竞争向系统优势转变的重要性。文章指出IoT竞争胜负关键在后半场的数据运营和服务延伸,建议企业通过构建差异化能力、完善服务体系、建立数据体系、逐步构建生态来避免价格战陷阱,实现从跟随到领

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 359

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 220

HSTS漏洞(缺少Strict-Transport-Security头)

HTTP严格传输安全性(HSTS)告诉浏览器只能使用HTTPS访问网站。检测到您的Web应用程序未实现HTTP严格传输安全性(HSTS),因为响应中缺少严格传输安全性标头。理想回复响应头因存在:Strict-Transport-Security: max-age=31536000信息。nginx添加响应头。

墨痕诉清风的博客 4409

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 389

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 341

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 146

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 334

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

算法大师! 720

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 303

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 436

#SQLite 数据库笔记一:(概念 / 终端指令 / SQL 语句 / C 编程 / 回调函数)

数据库 = 数据的仓库,假设数据是海量。能力说明存储数据持久化保存,程序退出数据还在统计数据、分组、排序数据管理增、删、改、查(CRUD)嵌入式设备上也会用数据库(单片机网关、路由器、工业 HMI 都常见),因为 sqlite 体积小、无需服务进程、单文件即可。数据库 = 库 > 表 > 记录(行) > 字段(列)sqlite3 = 开源、C 写的、单文件、免安装、最多 2T 的嵌入式关系型数据库。

lwq20051110的博客 201

C 语言 malloc() 详解与实战 Demo

本文详解C语言malloc()函数,涵盖其语法、内存原理及实战应用。通过动态整数、数组、结构体与链表的Demo,演示如何安全申请、使用与释放内存,强调避免内存泄漏与空指针检查的重要性,帮助开发者掌握动态内存管理核心技能。

tangPHP的博客 366

【C++】【STL】string_OJ题

本文总结了9道C++ STL中关于string的OJ题目,按操作类型分为三组:反转与就地修改(如917、541、151)、计数与查找(如387、125、58)、模拟与大数运算(如415、43、8)。核心技巧包括双指针收敛、字符分类处理、进位控制及边界值处理。所有题目使用同一套源码,在标准库std::string与自定义容器MyString间切换仅需宏定义,验证结果一致性。代码通过随机测试用例与Trace函数逐行比对,确保逻辑正确性,强调接口对齐的重要性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 4370

【C++ 基础入门】C++继承(下):问题、底层原理与组合

C++继承(菱形继承的问题、虚继承原理、继承与组合、构造顺序)

2601_96587588的博客 769

【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针

C++类与对象知识(面向过程和面向对象的初步认识,类的初步认识,类的访问限定符及封装,类的作用域、实例化,类的对象模型,this指针)

2601_96587588的博客 876

cargo bench 快速上手

是 Rust 内置的基准测试命令,用于。不过,Rust 标准库的#[bench]属性目前仅在版本可用,因此在稳定版(stable)上,社区标准做法是使用框架。

Doublelv 的博客专栏。 339

C++09_vector类复习

本文以10个核心问题为主线,系统解析C++ vector的底层机制:从基本概念、初始化方式、遍历方法,到size与capacity的区别、扩容策略(VS 1.5×,g++ 2×)、reserve与resize差异、中间增删的挪动原理、迭代器失效原因,直至二维vector的内存布局(含三指针结构)。通过“先会用、再懂扩容、最后看清对象结构”的递进逻辑,揭示vector作为动态数组的本质——连续内存、自动扩容、随机访问高效,但插入删除代价高,迭代器易失效。全文深入浅出,助读者摆脱“黑盒”认知,真正掌握其内存图景

lemo_n_的博客 337

C++零基础入门第3周:if/else、switch、for/while/do-while 控制流完全指南(附20段可运行代码+避坑清单)

第3周 · 控制流1. 分支:if/else2. 分支:switch3. 循环:for4. 循环:while / do-while5. 范围 for(C++11)6. 跳转:break/continue/return/goto7. 现代 C++ 分支特性避坑:悬空 else / 浮点比较避坑:忘 break / 作用域避坑:边界 off-by-one避坑:do-while 至少执行一次避坑:遍历时修改容器避坑:goto 破坏结构if constexpr / if consteval本周项目:猜数字游戏 #m

qq_58662768的博客 213

《C++ 项目:手写大模型接入 SDK》Gemini接口设计(上):初始化、全量响应实现和测试

本文系统完成了Gemini模型通过OpenAI兼容API的接入开发,基于Apifox验证接口规范,设计并实现GeminiProvider类,涵盖初始化、状态检测、全量响应等核心功能。重点处理了代理配置强制校验、Bearer鉴权、JSON序列化与响应解析等工程细节,并通过GTest与CMake完成单元测试,验证链路可用性。项目遵循策略模式,保持与DeepSeek、ChatGPT等模型的统一抽象接口,显著提升SDK可扩展性。

2501_91275995的博客 385
上一篇: [USACO25OPEN] Election Queries G 题解
下一篇: P11673 [USACO25JAN] Median Heap G 题解
peter_code
博客等级 码龄5年 41粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值