自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 收藏
  • 关注

原创 回型矩阵(板子题)

输入一个 𝑛 行 𝑚 列的矩阵,从左上角开始将其按回字形的顺序顺时针打印出来。

2026-01-21 20:37:07 115

原创 计算2的n次方(大整数乘法)

计算2的n次方,n<=10000。

2026-01-21 20:25:28 404

原创 翻转一维数组

输入一个 𝑛,再输入 𝑛 个整数。将这个数组顺时针旋转 k(k≤n) 次,最后将结果输出。顺时针旋转一次是指:将最左边的数放到最右边。

2026-01-21 15:43:53 48

原创 机器学习基础知识

密度可达:通过核心对象链连接),能发现任意形状的簇,无需指定k值,对噪声鲁棒。半监督学习:利用未标记数据提升模型性能,分为生成式方法(假设数据服从某种生成模型,用未标记数据估计模型参数)、半监督SVM(通过间隔最大化利用未标记数据)、图半监督学习(将样本构建为图,利用图的平滑性传播标签)。原理:基于自助采样(有放回采样),从含m个样本的数据集D中,随机采样m次得到训练集D’(部分样本重复,部分样本未被选中),未被选中的样本(约36.8%)作为测试集,重复该过程多次,取评估结果平均值。

2026-01-18 20:44:18 777

原创 STL专项:priority_queue 优先队列(堆)

也叫"",仅维护,可以在较小的时间复杂度内获取某个元素集合的最大或最小值优先队列常用于等问题或算法中,应用非常广泛。

2025-12-28 18:47:01 699

原创 STL专项:deque 双端队列

是的升级版,全称为,队头和队尾都支持入队和出队,同时还支持遍历,所有操作时间复杂度均为。

2025-12-28 17:55:43 348

原创 STL专项:queue 队列

提供了先进先出的数据结构。队列在尾部添加元素,在头部删除元素。等算法。

2025-12-28 17:15:23 339

原创 STL专项:stack 栈

本文章是学习过程中记录的笔记,主要来源Erik_Tse。

2025-12-28 14:16:01 636

原创 STL专项:vector 变长数组

以下内容为学习过程中所记录的笔记万能头文件 / 预编译头文件,它的本质是包含了 C++ 标准库中几乎所有常用的头文件(比如输入输出、字符串、容器、算法、数学函数等)使用std命名空间,在代码中可以直接使用标准库中的标识符(如函数、类、变量等),无需额外添加 std:: 前缀。

2025-12-28 10:55:31 991

原创 xtuoj 字符串计数

发现问题:暴力枚举O(n²)超时 → 核心痛点是“逐个计算字符对”↓拆解问题:只有相同字符的(i,j)对有贡献 → 按字符分组计算↓找规律:对单个字符的位置列表,每新增一个位置p,其贡献可通过“已出现次数×(p+1) - 已出现位置和”批量计算↓抽象公式:贡献 = cnt*(p+1) - sum_pos(cnt是已出现次数,sum_pos是已出现位置和)↓落地实现:用数组(哈希表)记录每个字符的cnt和sum_pos,遍历字符串一次完成计算abcaba。

2025-12-14 23:15:49 765 1

原创 xtuoj 矩阵

要解决这道题,核心是找到—— 先分析 “相邻元素加减” 操作对矩阵的影响,再推导判断条件。

2025-12-14 22:04:28 494

原创 xtuoj Balls

对每个操作(交换第x和x-1Swapa[x]a[x-1]xx-1a[x-1]a[x]la。

2025-12-04 23:33:43 378

原创 xtuoj 方程

核心:把 “解复杂方程” 转化为 “找因数对”

2025-12-04 23:21:18 1290

原创 xtuoj Prime Twins

核心思想:用筛法预处理素数前缀和快速查询,将多次查询的时间复杂度从 O (n) 降为 O(1);关键逻辑:孪生素数对(x, x+2)的统计转化为对 x 的范围判断,再通过前缀和差值计算区间数量;效率优势:预处理仅需 O (N log log N) 时间,后续每个查询都是 O (1),适合大数据范围和多组查询场景。

2025-12-04 22:57:36 482

原创 xtuoj 哈希

①:用埃氏筛法生成足够大范围内的所有素数(按升序排列),为后续查找做准备;②:基于鸽巢原理,直接定位到第一个≥n/2 的素数(sz<n/2 时必然不满足要求,无需校验)③。

2025-12-04 21:36:16 380

原创 概率论与数理统计:期末复习梳理

∅∅∅ —— 不可能事件ΩΩΩ —— 必然事件A∩B=AB=∅A∩B = AB = ∅A∩B=AB=∅P(A‾)=1−P(A)P(\overline{A})=1-P(A)P(A)=1−P(A)P(AUB)=P(A)+P(B)−P(AB)P(AUB) = P(A) + P(B) - P(AB)P(AUB)=P(A)+P(B)−P(AB)P(AUBUC)=P(A)+P(B)+P(C)−P(AB)−P(AC)−P(BC)+P(ABC)P(AUBUC) =P(A) + P(B) + P(C) - P(AB) -

2025-12-04 14:29:41 655

原创 xtuoj 素数个数

(10亿):太大,不能筛整个1到R(100万):区间长度有限,可以存下:需要高效处理:任何一个合数 n 必有一个质因数 p ≤ √n:区间 [L, R] 中的合数,必有一个质因数 ≤ √R:R=1000000000(10亿)√R ≈ 31623只需要用到 ≤31623 的素数去判断区间内的数:O(√R log log √R) ≈ O(31623) 很小j - L:将[L, R]映射到数组[0, R-L]:找到第一个≤L的p倍数跳过p本身:避免把区间内的素数标记为合数。

2025-12-03 23:14:06 947

原创 xtuoj 素数字符串

这里我用线性筛然后答案一直错误,可能是我筛的范围没把控到位,主要是这里是用素数转成字符串,然后再去填充,给的是长度的范围。所以我后来直接用的试除法,当然利用了一下偶数中只有2是质数,然后生成素数序列,最后利用前缀和统计出0-9各个数字各个长度出现次数。如何生成素数序列,char temp[20],sprintf(temp,"%d",i),itempsprintftemp"%d"iitemp"123"'\0'然后将temp里面的字符依次存入素数串字符数组中。

2025-12-03 22:31:55 470

原创 xtuoj Interprime

prev + iavg接下来就是利用这个特性编写代码了。首先用先计算1e6+100以内的素数,多算一点避免漏掉一些情况,比如说两个相邻的素数刚好有个在1e6左边,还有一个在右边一点,然后平均值还是在1e6内,那这样你在右边一点的那个素数也能考虑到。接着就是定义一个存左边的奇质数,,每次取出一个素数,然后取平均值,判断其如果不是素数而且在范围内,那个这个平均值就是满足要求的内部素数,然后再把prev设置为当前的primes[i],相当于向右移动了一个单位。这里注意一点我们的循环条件应该设置为。

2025-12-03 20:07:14 424 1

原创 xtuoj 不定方程的正整数解

以上解决了如何将题目转换为代码问题。接下来就是如何编写代码了。

2025-12-03 09:40:49 953

原创 xtuoj D_Prime

首先写一个判断质数的函数 is_Prime,这里利用,其余都是合数,进行优化。然后根据 D_Prime 的定义,即。这里扩展一下,由于p是质数,所以p的因子只有1和p,q是质数,q的因子只有1和q,我的想法是p从2到sqrt(n),然后q=n/p,一直寻找,如果满足p!=q,p,q都是质数以及n%p==0,那么我们就找到了p和q,此时的n就是D_Prime。但是不幸的是,这样非常容易超时,因为循环非常耗费时间,所以我们要进行优化。这里采用的优化思路是分奇偶讨论n。

2025-12-02 13:11:30 455

原创 xtuoj 素数

由前面进制转换的经验,我们可以知道,我们想要得到所有的区间,应该,然后再将字符串转换为数字。,通过ascii码字符之间的关系知,。num首先初始化为0,然后从这里的digit依次从高位到低位取,最后得到的就是转换成数字以后的。要确定一个区间,肯定要先确定它的起点和终点,这里我们以 i 为起点,j 为终点,通过以下操作实现取得每个区间。下面的思路非常类似的思路。这段代码中用s[j] - '0'获取当前位的数字,配合配合内层循环中对num的更新逻辑,确实是一个非常巧妙的优化,核心在于s[j] - '0'

2025-11-11 17:53:05 798

原创 xtuoj Flawless Prime

如果一个素数,依次去掉最高位得到一个数,这个数无前导0,并仍然是素数,就称其为无暇素数素数不是无暇素数有两种情况。情况一:有0;情况二:去掉前面的数后,不是素数。所以关键点就是判断是否有0。为什么这里可以简化为直接判断有无0,而不是要考虑有无前导0呢,因为题目说了依次去掉最高位,所以等价。如何判断有无0,将数字的每一位单独存起来,如果发现有0,直接判断不是无暇素数。还有个关键就是如何判断依次去掉最高位后是否是素数。

2025-11-07 15:56:09 876

原创 xtuoj Binary

二进制的话就用位运算的知识比较方便,&就是按位与,&1就是判断最后一位的二进制是否为1,如果是len++,如果不是,则断掉了,len=0,同时记录当前最大的len,然后n>>=1,n右移一位,继续处理下一位,当n==0时,结束循环,也全部转换为二进制了,输出max即为答案,注意不要用int,否则它会显示超时,所以我换成long long就对了。

2025-11-04 20:17:19 319

原创 xtuoj 数码和

先看题目的输出要求,第一行是相同的数码和出现的最多的次数max_f,接下来的行数取决于有多少个数码和的出现次数等于max_f,如果有k个,那么后面输出k行,每行的第一个数是出现最多次的那个数码和值,接着是那些进制下的数码和值等于该值,将进制输出,然后进制之间按照升序,每行之间的顺序取决于数码和值的大小,按照数码和值的升序排列。观察题目,可知我们要求进制对应的数码和、数码和出现次数、数码和对应的进制。

2025-11-04 19:47:12 248

原创 xtuoj Min Base II

这里处理b的搜索机制可以参考,只不过这里数很大,所以不妨将第一个搜索区间扩大一点,这里就不赘述了。然后就是判断出现频率是否相同,首先通过除基取余法转为b进制,同时将b进制下每位数字的出现频率记录下来,然后判断出现过的数字中,是否每个数字的出现频率相同,若不同,则立刻判断该进制不符合,否则继续判断,直到判断完所有的后,还未判断为不符合,则该进制符合要求。

2025-11-02 16:39:05 392

原创 xtuoj 回文数

这里是将十进制转换为b进制,用到的是除基取余法,然后再判断该进制下转换的串够不构成回文串,这里我回顾了我之前写的回文串,,发现只要用双指针法即可,分别指向头和尾,如果不等,则立马判定为false,否则继续判断,头指针向后移动,尾指针向前移动,比较完后仍然没有判断为false,则为true。但是我发现别人写的代码要比我的代码快,做了一些优化。

2025-11-02 14:12:17 531

原创 xtuoj String Hash

首先将字符转换为数字,然后这样表示出来的是26进制,但是要在最前面加上一个1,再通过多项式法则转换为十进制,最后对该十进制%1000000007。字符转换为数字可以用数组存,也可以直接用一个变量存,因为只需要用到依次。

2025-11-02 13:01:30 392

原创 xtuoj 2021

这题的思路和前面写的的思路差不多,只是这里要注意一下要分析这个进制的上界。上界的分析:当这个数字串只有一位有效数字num时(有效数字就是把前导0去掉剩下的那些数字),必然不可能等于2021,因为最后一位是num*b^0,也就是num,num在0~9之间,所以不可能等于2021;

2025-11-02 11:49:42 633

原创 xtuoj 相同的数码

我采用的还是单调那题的思路,,其实差不多,这里只是变成了判断是否相等。就是你先设置一个pre,也就是在这串数码的最后设置一个数,这个数就让它等于最后一个数,因为题目要保证所有的数相等,然后dig设置为最后一个数,判断pre和dig是否相等,若相等,则继续比较,即设置pre=dig,n/=b,若不相等,即可立刻判断该进制下不成立。

2025-11-02 10:26:41 386

原创 xtuoj 单调

由于ai>ai-1恒成立,所以只要出现不成立的就可以提前终止,所以我想到了在线处理法,就是你先设置一个较小的值,能够满足它比所以可能出现的数都小,所以我们可以设置pre为-1,接着我们依次在线处理当前最低位的数(dig=n%base),如果dig<=pre,那么就不满足题目说的ai>ai-1,则可以立马判断该进制不符合要求false,如果判断完所有的数位后,仍然没有被判定为false,那么就返回true。然后我们从2进制开始判断就好了,因为b>=2,然后for(int b=2;

2025-10-31 15:31:43 402

原创 xtuoj Digit String

首先,我们需要将得到的字符串,按字符拆解,将字符转换为对应数字。如何做呢?

2025-10-30 14:30:49 764

原创 xtuoj A+B V

题目说总是忘记进位,所以他每次算出来的都是个位数,就是0-9,显然我们知道mod10以后得到的结果就可以是这样。所以,我们每次取出a和b的末位,这里用%10即可实现取出末位,然后得到的结果我们对其%10,这是因为他忘记进位,当前得到的数是最终结果的地位,所以我们要对其乘以权重,而最低位的权重是1。接着处理完末位以后,a/=10,b/=10,去掉末位,以便下次取出来的末位是我们要处理的数字,还有base*=10,对权重也要进行更新,这样我们下次处理的结果就会在正确的位置上,即左移一位。

2025-10-29 15:38:09 386

原创 xtuoj 平衡二进制2

关键是如何将十进制整数转换为平衡三进制。思考如何将十进制整数转换为普通的三进制呢,很显然用除基取余法即可,即除基取余,由低到高,商零为止。这是通用的将十进制整数转换为其他进制的方法,这里转换为三进制,那么基数取三即可。那么用代码怎么实现呢,首先商零为止,所以我们肯定用一个 while循环,且循环条件是 n!=0,也可以直接写成 while(n);除三取余,即 r=n%3,得到除三以后的余数,n=n/3 ,更新我们的商,然后商为0时终止循环;

2025-10-29 14:36:06 701

原创 xtuoj 水仙花数

计算数的位数。采用循环法即可,初始化位数 n 为0,去掉末位数并将当前数更新,即 t=t/10(/10相当于去掉末尾) ,然后位数加一, n++,但当前数为 0 时,位数计算完毕,终止循环。计算每个数位的 n 次方。采用快速幂,这里我为了避免 pow 函数精度问题并且提高效率,我采用了快速幂,直接套模板就好了,主要涉及的知识点是二进制与十进制的关系,以及位运算的知识。

2025-10-27 13:27:58 404

原创 xtuoj 奇怪的开关(含调和级数两种模板)

设 E[i] 表示当亮起的灯数是 i 盏到亮起的灯数是 k 盏的按键次数期望,E[i] = 1 + i/n * E[i] + (n-i)/n * E[i+1],1 表示当前按的这次,i/n表示按到亮起的灯的概率,(n-i)/n 表示按到灭的灯的概率,因为题目说选择灯的概率是等可能的,按到亮起的灯那么不会改变状态,所以有 i/n 的概率需要 E[i] 次按键才能实现最后亮起 k 盏灯;按到灭掉的灯,那么灭的那盏灯就会亮起,所以有 (n-i)/n 的概率需要 E[i+1] 次按键才能实现最后亮起 k 盏灯。

2025-10-23 20:31:00 549

原创 xtuoj 0和1

这是一个简单的数学题,唯一难的可能是计算组合数吧。我们设0的个数为k,那么1的个数就是k+m,01字符串长度是n,则k+m+k=n,计算得出k=(n-m)/2,0的个数为(n-m)/2,1的个数为(n+m)/2,由实际意义知,0和1的个数必然是整数,那么要求(n+m)%==2以及(n-m)%2==0,不满足任何一个条件,那么这样的排列方案数不存在。

2025-10-22 23:37:05 413

原创 xtuoj Repeat One

全部由数码1组成的数(如1, 11, 111, 1111, …)永远不能被2或5的倍数整除。也就是说,任何含有质因数2或5的正整数都无法整除这类数。原因在于: 这些数总是奇数,因此不能被2整除。这些数的个位总是1,因此不能被5整除。如果正整数M与10互质(即M不含质因数2或5),则总存在一个由全1组成的数能被M整除。因此,永远不能整除全1数的数就是所有2的倍数和5的倍数。

2025-10-22 23:04:44 481

原创 xtuoj Candy

通过模3运算我们可以把1~N中的数分成三部分,模三余0,模三余1,模三余2,即3n、3n+1、3n+2这三部分。题目要求取出来的三个数之和是3的倍数,那么有四种情况,从模三余0的数里面取三个、从模三余1的数里面取三个、从模三余2的数里面取三个以及从模三余0、1、2的数里面分别取一个。模三余0、1、2的个数分别设为c0、c1、c2。c0就是满足求1=<3n<=N中,n的个数,n最大取值为N/3,n=1,2,3,...,N/3,一共有N/3个,也就是说c0=N/3;

2025-10-22 21:04:21 928

原创 求逆元方法详解

费马小定理:如果模数p是一个质数,且整数a不是p的倍数(即a与pap−1≡1modpa×ap−2≡1modp所以,ap−2就是a在模p下的逆元。

2025-10-22 13:10:24 865

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除