Codeforces Round #740 (Div. 2) CF1561

豆包大模型API调用两种方法 ps: 因为是自用,所以这里图方便采用硬编码密钥的形式;如果有需求/安全风险,建议参考官方教程设置ARK_API_KEY环境变量的方式。坏处是:看别人的教程走了一大圈弯路hh;基础调用的话方法一就可以满足了,也比较方便快捷,容易上手。将 <Model> 替换为 Endpoint ID即可。创建就按照提示填写信息就行,需要实名认证,有免费额度。绿框框里就是Endpoint ID。 阅读详情

A.模拟

看一下,数据范围很小,我们按照题意模拟暴力就好了

#include<bits/stdc++.h>
using namespace std;
int a[950];
int n;
inline bool check()
{
	for (int i=1;i<=n;++i)if (a[i]!=i)return false;
	return true;
}
int main()
{
	ios::sync_with_stdio(0);
	int t;cin>>t;
	while (t--)
	{
		cin>>n;
		for (int i=1;i<=n;++i)cin>>a[i];
		int ans=0;
		while (!check())
		{
			++ans;
			if (ans&1)
			{
				for (int i=1;i<=n-2;i+=2)if (a[i]>a[i+1])swap(a[i],a[i+1]);
			}
			else
			{
				for (int i=2;i<=n-1;i+=2)if (a[i]>a[i+1])swap(a[i],a[i+1]);
			}
		}cout<<ans<<"\n";
	}
}

B.耐心推公式

这题不难,关键是要理清逻辑关系

我们先固定出谁先手谁后手,那么就可以知道每个人作为先手发球了几轮

默认,发球的都胜利,那么一共nnn轮

先手发球了⌈n2⌉\lceil \frac{n}{2} \rceil⌈2n​⌉ 也赢了⌈n2⌉\lceil \frac{n}{2} \rceil⌈2n​⌉ 题目中所给条件赢了aaa

后手发球了⌊n2⌋\lfloor \frac{n}{2} \rfloor⌊2n​⌋ 也赢了⌊n2⌋\lfloor \frac{n}{2} \rfloor⌊2n​⌋ 题目中所给条件赢了bbb

假设先手发球输了xxx场,后手发球输了yyy场

那么⌈n2⌉−x+y=a\lceil \frac{n}{2} \rceil-x+y = a⌈2n​⌉−x+y=a

且 ⌊n2⌋−y+x=b\lfloor \frac{n}{2} \rfloor -y +x = b⌊2n​⌋−y+x=b

其中0≤x≤⌈n2⌉0 \le x \le \lceil \frac{n}{2} \rceil0≤x≤⌈2n​⌉ 0≤y≤⌊n2⌋0\le y\le \lfloor \frac{n}{2} \rfloor0≤y≤⌊2n​⌋

消元法,消去yyy,然后求出xxx的取值范围

最后交换一下先后手再统计一次答案即可

#include<bits/stdc++.h>
using namespace std;
set<int> se;

//na-x+y=a,nb-y+x=b;
//x-y=na-a=b-nb
//y=x-na+a
//0<=x<=na,0<=y<=nb
//0<=x<=na,na-a<=x<=nb+na-a
void solve(int a,int b)
{
	int sum = a+b;
	int na = (sum+1)/2;
	int nb = sum-na;
	for (int i=max(0,na-a);i<=min(na,b);++i)se.insert(i+i-na+a);
	
}
int main()
{
	ios::sync_with_stdio(0);
	int t;cin>>t;
	while (t--)
	{
		se.clear();
		int a,b;
		cin>>a>>b;
		solve(a,b);
		solve(b,a);
		cout<<(int)se.size()<<endl;
		for (int res:se)cout<<res<<" ";
		cout<<endl;
	}
}

C.贪心

简单的贪心问题

首先单看每一组,我们可以统计出攻略这个组中所有的怪兽所需要最小力量

即max(ai−i)+1max(a_i-i)+1max(ai​−i)+1 其中0≤i<len0\le i< len0≤i<len记本组长度为lenlenlen

那么我们现在知道了每一组的最小攻略力量和每一组的怪兽数量

要处理的是将那些组放在前面攻略,将那些组放在后面攻略 理所当然被放在后面的组在攻略时更占优势

策略是贪心,我们按照攻略的难易程度,由易到难进行排序,然后统计出答案即可。

为什么贪心是对的呢?

我们不妨设想,假设最终我们是在攻略第iii组时导致需要使用的力量最高

那么,如果将他和一个攻略难度更高的进行交换,事情只会变得更糟糕!

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
int n;
pair<int,int> res[maxn];
int main()
{
	ios::sync_with_stdio(0);
	int t;cin>>t;
	while (t--)
	{
		cin>>n;
		for (int i=1;i<=n;++i)
		{
			cin>>res[i].second;
			res[i].first=0;
			for (int j=0;j<res[i].second;++j)
			{
				int num;cin>>num;
				res[i].first = max(res[i].first,num-j);
			}
		}
		sort(res+1,res+1+n);
		int pre=0;
		int ans=0;
		for (int i=1;i<=n;i++)
		{
			res[i].first -= pre;
			ans = max(ans,res[i].first);
			pre += res[i].second;
		}
		cout<<ans+1<<endl;
	}
}

D1.整除分块

总体策略是dpdpdp

dp[i]dp[i]dp[i]表示 n=in=in=i时的答案

很明显根据第一个操作,dp[i]dp[i]dp[i]可以转移到dp[1],dp[2],dp[3],dp[4]…dp[i−1]dp[1],dp[2],dp[3],dp[4]\ldots dp[i-1]dp[1],dp[2],dp[3],dp[4]…dp[i−1]

这个我们维护一个前缀和pre[i]pre[i]pre[i]即可 dp[i]+=pre[i−1]dp[i]+=pre[i-1]dp[i]+=pre[i−1]

关键是第二个条件,我们无法利用前缀和加快状态的转移

但是我们注意到了,他所转移的状态好像不是很多

这便是经典的整除分快了

对于l≤nl\leq nl≤n 整除结果为⌊nl⌋\lfloor \frac{n}{l} \rfloor⌊ln​⌋

那么对于r=⌊n⌊nl⌋⌋r = \lfloor \frac{n}{\lfloor \frac{n}{l} \rfloor} \rfloorr=⌊⌊ln​⌋n​⌋

⌊nr⌋=⌊nl⌋\lfloor \frac{n}{r} \rfloor = \lfloor \frac{n}{l} \rfloor⌊rn​⌋=⌊ln​⌋ 且 ⌊nr+1⌋≠⌊nl⌋\lfloor \frac{n}{r+1} \rfloor \ne \lfloor \frac{n}{l} \rfloor⌊r+1n​⌋​=⌊ln​⌋

依据这个结论我们可以快速地跳跃找到所有的状态

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+100;
ll mod,n;
ll dp[maxn];
ll pre[maxn];

int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>mod;
	dp[1]=pre[1]=1;
	for (int i=2;i<=n;++i)
	{
		dp[i]=pre[i-1];
		int l=2;
		while (l<=i)
		{
			int r = i/(i/l);
			dp[i] = (dp[i]+(r-l+1)*dp[i/l]%mod)%mod;
			l = r+1;
		}
		pre[i]=(pre[i-1]+dp[i])%mod;
//		cout<<i<<":"<<dp[i]<<","<<pre[i]<<endl;
	}
	cout<<dp[n]<<endl;
}

D2.思维

OKOKOK nnn的范围变成了4e64e64e6很明显,O(nn)O(n\sqrt{n})O(nn​)的算法不再起作用

我们需要更快的算法!!

关键还是在于如何提高操作222的转移速度!!!

这次我们反过来思考,似乎从dp[i]dp[i]dp[i]向dp[j],j<idp[j],j<idp[j],j<i 的转移O(nn)O(n\sqrt n)O(nn​)已经到极限了

我们考虑,在dp[i]dp[i]dp[i]已经求出的情况下,向dp[j],j>idp[j],j>idp[j],j>i更新 这也是dpdpdp的一个常见的想法

为此我们需要仔细地思考操作二的意义

对于jjj,2≤z≤j2 \le z \le j2≤z≤j ⌊jz⌋=i\lfloor \frac{j}{z} \rfloor = i⌊zj​⌋=i

那么对于[zi,zi+z−1][zi,zi+z-1][zi,zi+z−1] 中的所有数jjj ⌊jz⌋=i\lfloor \frac{j}{z} \rfloor = i⌊zj​⌋=i

因此,当我们求出dp[i]dp[i]dp[i]的情况下,我们可以枚举2≤z≤n2 \le z\le n2≤z≤n

对每一个[zi,zi+z−1][zi,zi+z-1][zi,zi+z−1] 区间加上dp[i]dp[i]dp[i]

从而实现操作二!!!

暂时不考虑区间加的代价,我们发现这是一个调和级数的复杂度O(nlogn)O(nlogn)O(nlogn)

有了区间加,我们如果使用线段树或者树状数组复杂度上升至nlogn2nlogn^2nlogn2

这里我们选择前缀和维护区间加操作即可 总复杂度为O(nlogn)O(nlogn)O(nlogn)

速度还是很可观的

#include<bits/stdc++.h>
using namespace std;
const int maxn = 4e6+100;
int n,mod;
int pre[maxn];//与D1不同,这里维护的是操作二的前缀和
int main()
{
	ios::sync_with_stdio(0);
	cin>>n>>mod;
	int tmp = 0,ans = 0;//tmp 为D1中的pre
	for (int i=1;i<=n;++i)
	{
		pre[i] = (pre[i]+pre[i-1])%mod;
		ans = (pre[i]+tmp)%mod;
		if (i==1)ans=1;
		tmp = (tmp+ans)%mod;
		
		for (int j=2;j<=n;++j)
		{
			int l = i*j;
			int r = (i+1)*j-1;
			r = min(r,n);
			if (l>n)break;
			pre[l]=(pre[l]+ans)%mod;
			pre[r+1]=(pre[r+1]-ans+mod)%mod;
		}
	}
	cout<<ans<<endl;
}

E.构造

一步步思考

一开始看感觉很束手无策

我们不妨先减少一些条件,假如没有长度为奇数的限制的话,我们该如何构造呢?

这种构造有一种比较套路的构造方法:一个一个放位置

即,我们先把nnn放在a[n]a[n]a[n]上,再把n−1n-1n−1放在a[n−1]a[n-1]a[n−1]上 …\ldots…

这种构造非常简单,我们先找到nnn在原数组中的位置idnid_nidn​

然后reverse(idn)reverse(id_n)reverse(idn​) 然后reverse(n)reverse(n)reverse(n)

即,我们先找到iii在原数组中的位置idiid_iidi​

然后 reverse(idi),reverse(i)reverse(id_i),reverse(i)reverse(idi​),reverse(i)

加上奇数的限制的话该怎么办呢?

奇数限制改变了什么呢?

我们猛然发现对于一个数aaa她在奇数位置上,那么无论reversereversereverse多少次,她最终还是还会在奇数位置上

如果aaa在偶数位置上,最终她还是在偶数位置上

换而言之,奇数位置的数是绝对无法和偶数位置上的数交换的!

也就是说,奇数位置上必须要有1,3,5,7…n1,3,5,7\ldots n1,3,5,7…n

偶数位置上必须要有2,4,6,…n−12,4,6,\dots n-12,4,6,…n−1

然后

我们可以按照简化版的方案将奇数位置上的数排序

我们也可以模仿按照简化版的方案将偶数位置上的数排序

但是现实是骨感的,我们对奇数位置上的数排序后,再对偶数位置上的数排序时

会打乱奇数位置上的有序状态

很糟糕!

因此,我们决定将奇数和偶数绑定在一起排序

即,我们第一次将n,n−1n,n-1n,n−1归位,再将n−2,n−3n-2,n-3n−2,n−3归位 …\ldots…

即,我们将i,i−1(i is odd)i,i-1 (i\ is\ odd)i,i−1(i is odd)绑定在一起,使idi=idi−1+1id_i=id_{i-1}+1idi​=idi−1​+1

我们reverse(idi),reverse(i)reverse(id_i),reverse(i)reverse(idi​),reverse(i)即可

这样的话,关键就是绑定操作了!

如何绑定呢?

我们可以先找到idiid_iidi​ 然后reverse(idi)reverse(id_i)reverse(idi​)

此时idi=1id_i=1idi​=1我们再reverse(idi−1−1)reverse(id_{i-1}-1)reverse(idi−1​−1)

此时idi=idi−1−1id_i=id_{i-1}-1idi​=idi−1​−1

我们再reverse(idi−1+1)reverse(id_{i-1}+1)reverse(idi−1​+1)

此时idi=3,idi−1=2id_i=3,id_{i-1}=2idi​=3,idi−1​=2

reverse(3)reverse(3)reverse(3) idi=1,idi−1=2id_i=1,id_{i-1}=2idi​=1,idi−1​=2 成功绑定了

最后再reverse(i)reverse(i)reverse(i)即可

也就是说,我们想要归位i−1,ii-1,ii−1,i (iii为奇数) 需要的操作为

reverse(idi)reverse(id_i)reverse(idi​)

reverse(idi−1−1)reverse(id_{i-1}-1)reverse(idi−1​−1)

reverse(idi−1+1)reverse(id_{i-1}+1)reverse(idi−1​+1)

reverse(3)reverse(3)reverse(3)

reverse(i)reverse(i)reverse(i)

正好555步!!!

问题解决!!

#include<bits/stdc++.h>
using namespace std;
int a[2077];
int n;
inline int find_id(int tar)
{
	for (int i=1;i<=n;++i)if (a[i]==tar)return i;
}
vector<int> res;
int main()
{
	ios::sync_with_stdio(0);
	int t;cin>>t;
	while (t--)
	{

		cin>>n;res.clear();
		for (int i=1;i<=n;++i)cin>>a[i];
		if (n==1)
		{
			cout<<"0\n";
			continue;
		}
		bool f = true;
		for (int i=n;i>1;i-=2)
		{
			int id1 = find_id(i);
			int id2 = find_id(i-1);
			if (id1%2==0||id2%2==1)
			{
				f=false;
				cout<<"-1\n";
				break;
			}
			
			res.push_back(id1);
			reverse(a+1,a+1+id1);
			id1 = 1;
			id2 = find_id(i-1);
			
			res.push_back(id2-1);
			reverse(a+1,a+1+id2-1);
			id1 = id2-1;
			
			res.push_back(id2+1);
			reverse(a+1,a+1+id2+1);
			id1=3;id2=2;
			
			res.push_back(3);
			reverse(a+1,a+1+3);
			id1=1;id2=2;
			
			res.push_back(i);
			reverse(a+1,a+1+i);
			
		}if (!f)continue;
		
		cout<<res.size()<<"\n";
		for (int num:res)cout<<num<<" ";
		cout<<"\n";
	}
}
11 CO配置-控制-成本中心会计-定义分割结构(OKES-Define Splitting Structure) 业务背景:定义分割结构 事务码: OKES SPRO路径:SPRO->控制->成本中心会计->实际过账->期末结算->作业分配->划分->定义分割结构 第1步,SPRO路径进入 第2步,选择“新的条目”创建 分割结构 第3步,选择分割结构代码 点击“分割规则”进行下一个界面,点击“新条目”创建 分割结构规则 第4步,点击“为规则选择” 为分割结构规则创建版本并保存 第5步,选择“分配”,点击“新的条目” 输入分割结构分配 阅读详情

相关推荐

SAP期初库存导入 (1)

LSMW

IT养家 7192

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

(先进后出)

xys_678的博客 250

全桥 LLC 谐振变换器详细解析:结构 + 控制 + 工作原理全搞懂!

在现代高效率电源系统中,LLC 谐振变换器🔥早已成为降损利器。尤其是全桥 LLC 拓扑结构,由于其在、副边整流管的 ZCS(零电流关断),再加上优秀的效率表现,已经成为服务器电源、电动汽车 OBC、光伏逆变等场景的首选。那么,全桥 LLC 到底长啥样?它的控制方式是怎么回事?具体工作波形又是如何呢?今天我们就来一篇讲清楚、讲透彻的文章!🚗💨。

weixin_43199439的博客 3525

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

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

Maxwell_Newton的博客 346

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 556

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 849

C++移动构造函数详解

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

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

22、狭义相对论与曲线坐标空间相关知识解析

本文深入解析了狭义相对论与曲线坐标空间的核心概念,涵盖能量-动量张量的定义与守恒、曲线坐标系下的度量张量与基向量性质、协变与逆变张量的变换规则,并介绍了克里斯托费尔符号与协变导数的计算方法。进一步探讨了在弯曲空间中进行微积分运算的基础理论及其在广义相对论中的关键应用,如爱因斯坦场方程如何描述物质-能量对时空曲率的影响,为理解黑洞等引力现象提供了理论框架。

lambda的博客 116

跟我学c++中级篇—类型定义的方式

本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。

fpcc的专栏 86

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4212

Flowise智能调度系统设计与实现

本文深入探讨Flowise平台的智能调度系统设计与实现,包括调度模型、调度策略、调度优化、调度应用等方面。通过详细的设计方案和实现策略,帮助开发者构建智能的调度系统。本文详细介绍了Flowise平台的智能调度系统设计与实现,包括调度模型、调度策略、调度优化、调度应用等方面。通过详细的设计方案和实现策略,帮助开发者构建智能的调度系统。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1018

C++ 函数模版

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

2501_94041724的博客 306

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7837

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

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

Fuyo_0209的博客 448

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

lwq20051110的博客 235

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 164

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

2601_96587588的博客 798

825 mW 顶上 212 °C:ASM491S 的 105 °C/W、250 mA 短路电流与热关断

25 °C 环境里结温 34.1 °C,125 °C 环境里结温 134.1 °C——后者已经离 150 °C 只有 16 °C 了,但还在范围内。换个角度看同一件事:从 25 °C 和从 125 °C 起算,温升都是 86.6 °C,但一个到 111.6 °C(还在范围内),一个到 211.6 °C(远远超限)。这个算例里 20 °C/W 是我假设的,实际值取决于机壳材料、密封程度、有没有风扇,跨度可以从 5 °C/W 到 50 °C/W 以上。外面 50 °C 的机箱,盒内就是 63.9 °C。

ANSILIC的博客 388

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

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

2501_91275995的博客 395

【容斥原理计数】题解:P9489 ZHY的表示法_容斥原理_计数问题_前缀和问题转化_算法竞赛C++

给定 $ n $ 个正整数,求区间 $[l,r]$ 中有多少正整数 $ x $ 可表示为 $ \sum \lfloor \frac{y}{x_i} \rfloor $。通过二分确定最大 $ y $,转化为求 $ 1 \sim H $ 中是某些 $ x_i $ 倍数的数的个数,利用容斥原理与 DFS 枚举子集计算,结合 LCM 预判剪枝及去重优化,时间复杂度 $ O(2^n \log V) $,可高效处理 $ r \le 10^9 $ 的数据。

YLCHUP的博客 104

头歌 数据结构——C&C++线性表实训

本系列任务围绕线性表的链式实现,依次完成顺序构建、逆序构建、排序插入、查找、删除、求长度及栈、队列、集合等应用。通过动态内存分配与指针操作,掌握单链表的基本操作与实际应用,涵盖插入、删除、遍历、搜索等核心功能,最终实现数据结构在典型场景中的灵活运用。

一名敲代码的苦13程序员 243

字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)

本题核心思想是:最少移动步数 = 总长度 - 可保留的最长连续子串长度。未移动字母在T中必须为连续子串,在S中需保持相对顺序(即子序列)。通过枚举T的所有连续子串起点,贪心匹配S中的对应字符,求出最长可保留长度L,答案即为n−L。时间复杂度O(n²),空间复杂度O(n),适用于n≤1000。

冻柠茶飞冰走茶 589

C++ vector 添加与删除元素的底层原理:erase 返回值与倒序遍历删除

vector是连续内存的动态数组,支持O(1)随机访问,但扩容时需重新分配内存并搬迁元素。push_back和emplace_back均摊时间复杂度为O(1),扩容策略(如2倍或1.5倍)确保总代价均摊;insert与erase在中间位置操作需移动元素,时间复杂度O(n),且使后续迭代器失效。删除指定元素推荐使用erase-remove惯用法或std::erase_if,避免逐个删除导致O(n²)复杂度。从后往前遍历可防止漏删,但最优解仍是高效惯用法。预估容量后调用reserve()可避免频繁扩容,提升性能

2402_85743155的博客 798

C++ 标准库算法全景指南

本文系统梳理C++标准库<algorithm>与<numeric>中100+算法,按功能分为非修改、修改、排序、二分查找、归并、堆、极值、字典序、排列及数值操作十大类,涵盖典型用法与时间复杂度。结合C++20范围(ranges)与投影特性,实现更简洁高效的代码。

sss123ddd的博客 382

CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进

CuTe 的价值不在于它"好用",而在于它把 GPU 编程中最难表达的部分——布局与线程映射——变成了可以做代数运算的数学对象。它坚持 C++ 模板路线,拒绝引入编译器黑盒,换来了极致的可控性与性能上限,代价是陡峭的学习曲线与糟糕的报错体验。CuTe DSL 的出现,说明这个团队也意识到了"曲高和寡"的问题,正在尝试用 Python 的易用性包裹 C++ 模板的强大。未来 CuTe 大概率会继续扮演"底层布局中间层"的角色,而 DSL 层则负责把这份能力交付给更多开发者。

Maxwell_Newton的博客 256

C++ string 的接口使用、字符串处理与深浅拷贝实现

本文系统讲解C++ string类的接口使用、字符串处理技巧及深浅拷贝实现。重点对比C风格字符串的缺陷,阐明string在容量管理(size/capacity)、遍历(auto/range for)、修改操作上的优势;通过双指针扫描、计数统计等案例解析字符串处理逻辑;深入剖析浅拷贝风险与深拷贝实现,涵盖传统版与现代版资源管理策略,并简要介绍写时拷贝机制,帮助读者掌握高效安全的字符串编程实践。

2601_96348813的博客 245
上一篇: Codeforces Round #741 (Div. 2) CF1562
下一篇: AtCoder Beginner Contest 218
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值