2025 10.6~10.12
牛客周赛112 A - ICPC Regionals 好耶也是做上ICPC区域赛的题了(bushi) 题目描述 \hspace{15pt}在 ICPC\rm ICPCICPC 国际大学生程序设计竞赛亚洲区域赛(也就是常说的 ACM\rm ACMACM)中,一场比赛的获奖比例大约为: \hspace{15pt}金 ::: 银 ::: 铜 = 1:2:3=\ 1:2:3= 1:2:3。也就是说通常情况下大约 60%60\%60% 的队伍都可以获奖,其中前 10%10\%10% 是金奖,10%−30%10\%-30\%10%−30% 是银奖,而 30%−60%30\%-60\%30%−60% 是铜奖。 \hspace{15pt}以上是一个不够精细的估计,而精确的奖牌数量算法为: \hspace{15pt}如果一场 ICPC\rm ICPCICPC 的有效参赛人数为 xxx,则本场比赛的金奖数量为 x×10%x\times 10\%x×10%,不是整数时向上取整,也即:⌈x10⌉\lceil\frac{x}{10}\rceil⌈10x⌉,而银奖数量则是金奖的 222 倍,铜奖数量...
Logistic回归--识别小猫
本文用于记录Logistic回归在神经网络中的应用,主要用到 SigmoidSigmoidSigmoid 函数和二元交叉熵损失函数,做一个可以识别图片中是否是小猫的简单神经网络。 关于二元交叉熵损失函数,在我的博文交叉熵损失函数里有相关介绍。 本项目用到的数据集是从博主何宽开源的数据集处获得,你可以点击这里下载,提取码: 2u3w 用到的库 torch numpy h5py matplotlib 神经网络实现 数据文件 训练数据由209张64×64的图片组成,测试数据由50张64×64的图片组成。图片分为两类: 一类是猫,比如: 另一类不是猫,比如: 另外还有标签数据,是一个[img numbers, 1]的矩阵,1表示该图片是猫,0表示该图片不是猫。 用以下代码加载数据集: 1234567891011121314151617181920212223242526272829303132333435import torchimport numpy as npimport h5pydef load_dataset(): train_dataset = h5...
2025 9.29~10.5
程华杯2025 锐评:赛后当代码警察发现有部分人的代码有AI作弊的成分,尤其是新生,最绷不住的是先交一发AI原生版,再交一发去掉注释版。虽然是水赛,但也是正经的多人比赛,有必要让新生养成不能作弊的习惯。 A 双子之缚 题目 Alice和Bob正在进行回合制战斗。 一回合有两次战斗。 他们会按照下面的方式决定自己造成的伤害: 本次伤害为前两次双方造成的伤害的总和 第一回合,两个人都只造成1点伤害 显然,前若干次的伤害分别为1,1,2,3,5,8… 第一回合为1,1 第二回合为2,3 经过1919810回合战斗后,他们终于累了 依次输出第1,9,1,9,8,10回合中他们的伤害 相同回合中以逗号分隔,不同回合间换行 显然,一共有6行,每行2个数字 注意,输出顺序为1,9,1,9,8,10!!! 思路 想用智能人工算法直接手算打表,但是字迹潦草,抄错了项数,签到题直接wa两发… 签到 1234567891011121314151617181920#include <bits/stdc++.h>using namespace std;using ll = lon...
交叉熵损失函数
深度学习–交叉熵损失函数 二分类 如果要预测事件的结果只有两种情况–是或不是,用计算机语言来说要么为 1 ,要么为 0 ,那么在设计损失函数时就可以使用二分类的交叉熵损失函数。 例如,在判断图片是否为猫时,一张图片的预测结果只可能有两个: 这张图片的内容是猫 这张图片的内容不是猫 我们对二元交叉熵损失函数定义如下: 令单个样本的二元交叉熵损失 L(ai,yi)\mathcal{L}(\mathbf{a}^{i}, \mathbf{y}^{i})L(ai,yi) 为 L(ai,yi)=−yilog(ai)−(1−yi)log(1−ai)\mathcal{L}(\mathbf{a}^{i}, \mathbf{y}^{i}) = - \mathbf{y}^{i} \log(\mathbf{a}^{i}) - \left(1 - \mathbf{y}^{i}\right) \log\left(1 - \mathbf{a}^{i}\right) L(ai,yi)=−yilog(ai)−(1−yi)log(1−ai) 取所有样本损失的平均值: J=1m∑i=1mL(a(i),y...
组合数学
组合数学 容斥原理 集合 SSS 的子集 A1A_1A1 有性质 p1p_1p1 ,A2A_2A2 有性质 P2P_2P2 , …\dots… , AnA_nAn 有性质 PnP_nPn 。 那么,集合 SSS 中具有性质 P1,P2,…,PnP_1,P_2,\dots,P_nP1,P2,…,Pn 的集合个数为 ∣⋃i=1nAi∣=∑i=1n∣Ai∣−∑1≤i≤j≤n∣Ai∩Aj∣+∑1≤i≤j≤k≤n∣Ai∩Aj∩Ak∣−⋯+(−1)n+1∣∩i=1nAi∣\Big|\bigcup_{i=1}^nA_i \Big| = \sum_{i=1}^n\left| A_i\right| - \sum_{1 \leq i \leq j \leq n} \left| A_i \cap A_j \right| + \sum_{1 \leq i \leq j \leq k \leq n} \left| A_i \cap A_j \cap A_k \right| - \dots + (-1)^{n+1} \left| \cap_{i=1}^n A_i \right| i=...
2025 8.18~8.24
牛客周赛105 F \hspace{15pt}对于一个长度为 nnn 的数组 {a1,a2,…,an}\{a_1,a_2,\dots,a_n\}{a1,a2,…,an},小苯先定义 f(i)=gcd(a1,a2,…,ai)f\left(i \right)=\gcd\left(a_1,a_2,\dots,a_i \right)f(i)=gcd(a1,a2,…,ai)[1]^\texttt{[1]}[1],基于此,再定义数组的权值为: ∑j=1nf(j)\sum\limits_{j = 1}^{n}{f(j)}j=1∑nf(j) \hspace{15pt}现在,小红想让小苯构造一个长为 nnn 且所有元素都在 [1,m]\left[ 1,m \right][1,m] 之内的数组,满足其权值恰好为 xxx。 \hspace{15pt}请你帮帮小苯。 【名词解释】 \hspace{15pt}gcd[1]^\texttt{[1]}[1]:即最大公因数,指多个整数共有因数中最大的一个。例如,121212、181818 和 303030 的公因数有 1,2,3,61,2,3,...
模拟退火Simulated annealing算法
在记录模拟退火之前,我们来看看它的启发灵感–(详情见WIKI) “模拟退火”来自冶金学术语退火,是将材料加热后再经特定速率冷却的技术,目的是增大晶粒的体积,并且减少晶格中的缺陷,以改变材料的物理性质。材料中的原子原来会停留在使内能有局部最小值的位置,加热使能量变大,原子会离开原来位置,而随机在其他位置中移动。退火冷却时速度较慢,使得原子有较多可能可以找到内能比原先更低的位置。 模拟退火的原理也和金属退火的原理近似:我们将热力学的理论套用到统计学上,将搜寻空间内每一点想像成空气内的分子;分子的能量,就是它本身的动能;而搜寻空间内的每一点,也像空气分子一样带有“能量”,以表示该点对命题的合适程度。算法先以搜寻空间内一个任意点作起始:每一步先选择一个“邻居”,然后再计算从现有位置到达“邻居”的概率。 可以证明,模拟退火算法所得解依概率收敛到全局最优解。 模拟退火法可用于精确算法失效的高难度计算优化问题,虽然通常只能获得全局最优的近似,但对很多实际问题已经足够。 模拟退火直观收敛图: 模拟退火(SA)是一种优化算法,用来找全局最优。 如上面的灵感所说,模拟退火算法模仿的是金属...
AdamW优化器--Adam的升级版
回顾Adam优化器 AdamW是Adam的升级版,我们先回顾一下 Adam 假如你在训练一个神经网络,目标是找到损失函数的最小损失值。优化器就是你找最小损失值的策略,我们可以把这个过程比作下山,找到这片区域的最低山谷。 Adam优化器是一个不错的策略(放以前来看很好,但现在有AdamW了),它结合了两个方法: 动量:就像下山有惯性一样,Adam 会记住之前几步的方向,这样就走得更稳更快,用术语说就是加速收敛。 自适应学习率:山势陡峭(梯度大)的地方,它就小步走,防止摔倒(降低学习率);山势平缓(梯度小)的地方,它就迈大步,加快速度(增大学习率)。它为每个参数都单独调整步幅(也就是学习率)。 Adam 的公式比较复杂(毕竟不复杂就不会这么出名),但核心的参数更新步骤可以简化为: 新参数=旧参数−学习率∗动量梯度平方+一个小常数新参数 = 旧参数 - \frac{学习率 * 动量} {\sqrt{梯度平方} + 一个小常数} 新参数=旧参数−梯度平方+一个小常数学习率∗动量 它有一个问题:处理“权重衰减”的方式有缺陷。要理解 AdamW,必须先理解“权重衰减”和“L2正则...
2025 8.11~8.17
牛客周赛103 F \hspace{15pt}小红定义一棵树的其中一棵子树[1]^\texttt{[1]}[1]的权值为:将子树的所有节点编号从小到大排序后,形成数组的不动点[2]^\texttt{[2]}[2]数量。 \hspace{15pt}现在小红拿到了一棵有 nnn 个节点,以 nnn 为根的树,他想知道这棵树的所有子树的权值之和,请你帮帮他。 【名词解释】 \hspace{15pt}子树[1]^\texttt{[1]}[1]:树中某节点删掉与父亲相连的边后,该节点所在的子图。 \hspace{15pt}不动点[2]^\texttt{[2]}[2]:定义整数 i(1≦i≦m)i\left(1\leqq i \leqq m \right)i(1≦i≦m) 是长度为 mmm 的数组 {a1,a2,…,am}\{a_1,a_2,\dots,a_m\}{a1,a2,…,am} 的一个不动点,当且仅当满足 ai=ia_i = iai=i。 \hspace{15pt}第一行输入一个整数 n(1≦n≦2×105)n\left(1\leqq n \leqq 2\times 10...
树
二叉树 三种遍历 前中后序遍历的区别其实就是根节点的位置不同: 前序遍历是 根–左子–右子 中序遍历是 左子–根–右子 后序遍历是 左子–右子–根 前序遍历(Preorder Traversal) 顺序:根节点 → 左子树 → 右子树 特点:先访问根节点,再递归遍历左右子树。 示例: 12345 1 / \ 2 3 / \4 5 前序遍历结果:1, 2, 4, 5, 3 中序遍历(Inorder Traversal) 顺序:左子树 → 根节点 → 右子树 特点:先遍历左子树,再访问根节点,最后遍历右子树。 示例: 同一棵树的遍历结果:4, 2, 5, 1, 3 后序遍历(Postorder Traversal) 顺序:左子树 → 右子树 → 根节点 特点:先递归遍历左右子树,最后访问根节点。 示例: 同一棵树的遍历结果:4, 5, 2, 3, 1 完全二叉树 完全二叉树的性质: 对于任意一个节点iii,其父亲节点是i2\dfrac{i}{2}2i,左子节点是2×i2 \times i2×i,右子节点是2×i+12 \times i+12×...









