自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符串刷题(day1)题解

最少的反转次数就是字典序最大的字符后面的字符数量(每一次右移会有一个比最大字典序字符小的字符,移动到它的前面,当最大字典序的字符移动到子序列末尾的时候,再次移动就可以视为没有移动)。每个字符串可以看做由一个前缀字符和一个后缀字符串组合而成,不同长度的后缀字符串对答案的贡献是相同的,但是前面的字符是不同的,所以只用记录前面出现字符的种类即可。所以不难发现,以n的因数为循环节是不可以的,所以要想使不相同的字符最少,就要以n的最小非因数大小为循环节大小。为两者不同的字符对的对数,s为相同的字符对的对数。

2024-04-24 10:06:20 583

原创 Another Permutation Problem 题解

同样的,正序排列中,任意翻转多个数的位置,会使整体值减小。

2024-04-19 01:05:05 836

原创 Make Almost Equal With Mod 题解

那么余数一定是这个数的二进制的。位构成的数,所以一定存在一个。使得数组中的数要么取。

2024-04-17 07:37:09 296

原创 Forming Triangles 题解

的边都可以作为第三条边,那么就求出两条相等边的组合数,再与第三条边组合(等腰)。或者直接求三边组合数(等边)。,所以组成三角形的边必定至少有两条相等,如。

2024-04-16 16:18:56 133

原创 A Balanced Problemset? 题解

(1)证明所有子问题的最大公因数一定是x的因数。所以所有子问题的最大公因数一定是x的因数。和其倍数组成,不可能有非倍数的情况。的一定是因数以及他的倍数。一定是可能的最大公因数。(2)证明枚举的因数。

2024-04-16 11:15:29 298

原创 CodeForces 1000~1500记录(第一周)

因为每一次拆分后的数据,会影响整个数组的增或减的性质,也就是,拆分后的数据,还需要再次判断使用。

2024-04-06 09:30:51 161

原创 codeforces round 894题解 A~F

所以只要求出得到最接近n种无序关系的不同元素的数量s,然后再和n做差,将得到的差加到s种就可以得到结果。一个魔法师,每秒钟可以恢复w个单位的水魔法和f个单位的火魔法,有n个怪,每个怪都有血量,求魔法师最少多久消灭所有的怪。有n*m个格子,每个格子中有一个字符,问是否有从左往右的四列格子中,分别包含v,i,k,a四个字符。就从左往右枚举每一列,记录v,i,k,a有没有且是不是按顺序出现的。{1,1,2,2,3,4} 比上面多了两组{1,1}、{2,2}而{1,1,2,3,4} 比上面多了一组{1,1}

2023-12-25 20:39:40 868

原创 codeforces round 817 题解 A~F

枚举每个人,和当前的人所写的字符串,与其他两个人所写的字符串比较,并记录相同的个数。若当前人写的某个字符串,其余两个人都写了,那么当前人不得分,若当前人写的某个字符串,其余两人中一个人写了,那么当前人得1分。就用字符1,2来表示每个字符,红色表示为1,蓝色和绿色表示为2,最后直接比较修改后的两个字符串是否相等就好了。有两行字符串,字符串中的字符代表颜色,这个人会将蓝色和绿色看成一个颜色,判断两个字符串是否在他眼里相同。是每个人计数的总和。最多可以改变1~n个人的看的方向,求每一个数量的改变后的值的最大值。

2023-12-22 19:40:47 770

原创 codeforces round 748 题解 A~D2

我们不难发现,如果最后两位没办法整除25的话,那么最后的数,无论如何都不能整除25,也就是说,应该要先修改结尾的两位数,如果最后两位不对的话,前面修改再多都是没有用的。有一条长长的走廊,一只猫在走廊的起始点,有一堆老鼠在走廊的任意地方分布(不包括0,n位置),老鼠洞口在n处,老鼠进洞以后,就安全了,猫可以把它所在位置的老鼠全都吃掉。简单贪心问题,老鼠一定是离洞口近的先跑,因为如果最远的先跑,那么最终的结局就是,猫离本来可以跑掉的老鼠越来越近,反而跑不掉了,所以能跑的一定先跑。,因为猫到洞口是不会吃老鼠的。

2023-12-21 11:07:41 953

原创 codeforces round 811题解 A~F

时间是一个闭环,当到达凌晨十二点是,时间清零,但实际上我们可以不必这样,我们把时间转为一天1440分钟,当之一天这个人睡觉的时间之后没有顶任何闹钟,那么下一个闹钟,就是下一天的第一个闹钟,显然需要对闹钟时间进行排序,这里建议选用。首先,如果想让数是最小数,那么就要数字长度最短,并且较大值在低位上,所以就可以从大到小枚举1~9的数字,当sum+i>s的时候,就选取大小为s-sum的数,也就是较小的数,将每次选出的数存在数组里,然后倒着输出就ok了。处的状态**(放置该字符串的情况)。

2023-12-19 19:10:55 866

原创 CF round 900题解 A~D

得出这一点后,在一个区间内翻转,若一个区间翻转两次的话,相当于没有变,他的影响就可以被忽视,所以就可以用一个差分数组,记录每个区间的翻转次数,奇数次的区间就需要翻转,并且只用遍历区间的一半就行了,因为翻转是对称的。首先这个题不能暴力求解,即使我们通过二分找到了给定的x所在的区间,然后每次都要翻转,时间复杂度也依旧在O(n*q)。求出1~k和 n-k+1 ~n 的前缀和,判断x是否在这两个前缀和之间,如果在就存在,否则就不存在。奇数+奇数=偶数,奇数*3=奇数,奇数不能整除偶数,所以数组的构造方法就找到了。

2023-12-18 14:22:27 942

原创 CF F. Multi-Colored Segments

不知道是有什么恶心的数据还是怎么样,一直过不了40个点,始终超时。

2023-12-17 11:08:10 23

原创 题解|#G. How Many Paths?# cf

第二次,再次遍历,将到某一点的标记沿着路径传递(第一步不会传递标记,比如当结点4标记为2时,他的下一个节点,假设为6,标记还是1,所以需要传递)。第一次,找出入度为1,或入度大于等于2的点,打上标记,然后将没有访问到的点和他的出边一并删除,并标记为0。然后常规拓扑排序,当遇到环以后,所有与环相关的点都无法被访问到,就标记为-1即可。dfs跑两次,或者bfs跑两次,一次是解决不了的。这个题说实话有点难度。最后遍历标记就ok了。

2023-12-16 10:26:49 24

原创 拓扑排序的应用

一、判断有向图有无回路或者自环,如果当某一个点在,完成到该点的拓扑排序后,他的入度仍旧不等于0,说明这个点存在自环或者在回路内部。拓扑排序遇到回路或自环后会无法往下面进行,所以所有与自环或回路有联系的点都无法被遍历。

2023-12-16 10:05:37 26

原创 题解|#F. Kirei and the Linear Function#

这个题需要最终结果对9取模的值,那么我们不如过程中就对9取模,这样区间值的和就是0~8范围内了,然后两个for对大小为0 ~8的枚举就好了。前置知识:任意一个十进制数对9取模,就等于对这个数的所有数位的加和取模。用pair来存下两个左端点的点对就行了。

2023-12-14 11:29:24 24

原创 题解|#E. Sending a Sequence Over the Network# codeforces round 826

这个题的原问题是,从1~n有没有一个正确的序列划分,可以缩小为子问题,从1~i有没有正确的序列划分,由于子问题和原问题的求解方式一样,且原问题需要由子问题推来,这就说明了这个题需要用动态规划来求解(不过蒟蒻一开始也没想到动态规划,还是太菜了)。2、当i为起始时,要判断会不会越界,然后如果前**i-1**长度的区间能被正确划分,那么前**i+a[i]**长度的区间也能被正确划分。考虑递推方程怎么写,由于只用判断整体区间划分能否正确,所以设一个一维bool数组即可,

2023-12-14 10:23:13 23

原创 题解|#D. Masha and a Beautiful Tree# codeforces round 826

就是归并排序的变形,主要还是反映了一个大问题可以分成每个独立的子问题进行求解的分治思想,整体并不难。

2023-12-14 08:25:39 31

原创 题解|#C. Minimize the Thickness# codeforces round 826

因为要求每个序列的和相等,所以总数除以序列的值一定可以整除,所以就依据这个不断的枚举序列长度,并通过dfs进行验证,直到找到最符合题意的长度。这道题要将序列分为一个或多个连续序列,且要求每个序列的和相等,找到可能成功划分的最小厚度。

2023-12-14 07:28:32 23

原创 题解|#F. Reverse# codeforces round 760

然后不论是使用dfs还是bfs搜索的方式,都需要限制字符串长度,10^18是60个二进制位,所以长度限制在70就可以了。当目标字符串的最后一个字符的值为0的话,那么一定不可能,输出NO,然后结束即可。其他的也没什么要注意的地方,总之这个题2000的难度个人觉得打的偏高了一些。

2023-12-13 18:27:49 16

原创 题解|#C. Paint the Array# codeforces round 760

由题意可以知道,数组填充颜色后一定是这样子的rbrbrbrb(红蓝相间的),而可以被d整除的涂成一种颜色,不可以的涂成另一种颜色。,所以分别求出奇数下标和偶数下标的最大公约数(补充 欧几里得算法求最大公约数。

2023-12-13 08:24:37 60

原创 题解|E. Guess the Cycle Size# codeforces round 820

这个题呢,对于同一对点查询两次,如果答案不一样,那么两个答案的加和一定就是一个环。交互题大概就是你输出一句提问,机器回答你一句输入。第一次做交互题,有点懵逼不知道怎么做。

2023-12-13 08:22:48 26

原创 哈工大操作系统——第七章、换入换出用磁盘和时间来换取一个规整的虚拟内存

​ 通过虚拟页面的换入/换处机制呢,就实现了每个虚拟内存中的页面都能正确的映射到物理内存当中,具体是什么意思呢?当物理内存中为空时,当然虚拟页面可以直接建立映射,但是当物理内存中不足以映射一个虚拟页面时,就需要将一个最近时间内最少用到的程序(其实应该是程序的一部分)换出物理内存,腾出空间来再将虚拟页面换入。​ 首先当MMU发现虚拟页面在页表项的有效位为0时开始,这个时候MMU会向CPU发出缺页中断,缺页中断的调用号为14。

2023-10-25 09:16:25 105 1

原创 哈工大操作系统——第六章、内存管理——给程序执行提供一个舞台

​ 用户常常要求程序能以分段的方式出现。就是将代码段、数据段、栈段、函数库这些分开实现,即数据存放在数据段中,操作部分对应代码段,函数嵌套在栈段中实现。这些段都从0地址开始单独编址。​ 我们看到,这些段都从0地址开始单独编址,但是0地址处最多只能有一个程序,所以一定是需要重定位的,段的重定位我们引出段表的概念。段表是在程序各个段申请内存空间时形成的。​ 分页就是将物理内存分割成大小相等的页框,将请求放入物理内存的段也分割成同样大小的页,最后将所有的页都映射在页框上,完成物理内存页框的使用。

2023-10-22 17:00:56 157 1

原创 hdu 1010——tempter of the bone题解

​ 那么如何得知S、D的0,1情况呢,就看f(曼哈顿距离)的奇偶性,如果f为奇数,说明S、D一个为1,一个为0,如果f为偶数,说明S、D全为1或全为0。​ 从题目中我们可以发现可行性剪枝的方法:一共走T步,现在走了K步,还要走X步,这时候要判断是否还可以走X步。​ (2)S、D一个为1一个为0时,当T为奇数时,可能有解,当T为偶数时,一定无解。出发,每步走一块地板,在每块地板不能停留,而且走过的地板都不能再走。​ (1)S、D同0或同1,当T为偶数时,可能有解,当T为奇数时,一定无解。

2023-10-20 20:27:55 40 1

原创 哈工大操作系统第五章——进程同步

​ 就拿这个最最基础的模型举例,什么是生产者,显而易见是产生资源的部分,消费者是消耗资源的部分,那么如何让生产者产生的资源不过剩,消费者消耗的资源不超额呢,这就需要考虑如何**“同步”**——即,互相不可见的两部分的相互配合配合​ 信号量是在信号上关联的一组整数,可以根据这个整数来决定进程的阻塞或唤醒。​ 更具体一点点​ (1)信号量就是一个整型变量,用来记录和进程同步有关的重要信息​ (2)能让进程阻塞睡眠到这个信号量上。

2023-10-17 07:44:20 48

原创 哈工大操作系统实验四--基于内核栈完成进程的切换(理论分析)

执行切换TCB/TSS**(由于本实验要求使用内核栈来切换,那么我们就需要把schedule函数的根据TSS的切换方式,改为根据PCB的切换方式)** ,切换完成后,遇到函数的**}**,即执行ret指令,将栈顶的ret_from_sys_call函数地址弹出,然后执行该函数。进程切换以后,现在的栈顶指针指向的是切换以后的内核栈栈顶,要退出内核态进入用户态首先要做的就是恢复用户态的执行现场,就是一系列pop,然后调用iret弹出用户栈的基本信息,即cs:eip\ss:esp,显然就回到了用户态了。

2023-10-14 17:46:01 133 1

原创 神奇的函数指针

​ 我们知道函数名称反映了一个函数的地址,而指针恰恰也可以用地址来赋值,那么我们可不可以把二者结合起来呢?答案是可以的,我们可以通过指针来反应函数的地址,甚至可以声明一个有着函数指针语法的函数。举一个简单的例子​ 这就是一个函数指针的声明,当然如普通指针一样,他需要一个初始化的地址,如果不初始化,就会出一些问题,所以我们可以在声明的同时或者声明以后为他赋值。pf1=pam;​ 是不是和指针十分相似,没错,函数指针其实就是一种指向函数体的开始地址的指针(通俗来说就是指向函数的指针)。

2023-10-12 15:46:47 13 1

原创 哈工大操作系统学习——第三章、多进程——操作系统最核心的视图

并发就是多个程序同时开始进行,并且他们可以交替进行,当一个程序遇到I/0时,就跳转到另一条程序执行,当这条程序又遇到I/O时,再返回源程序执行。当然在这种跳转中,我们需要保存源程序的关键信息(寄存器的值)这就引出了进程的概念进程就是用来描述一个程序以及其执行过程中的信息的概念进程是描述程序以及反应程序执行信息的数据结构的总和这个数据结构叫做进程控制块**(PCB)**

2023-10-10 07:10:57 59 1

原创 哈工大操作系统--第二章、系统接口——通向操作系统内核的大门

操作系统提供的一些关键函数而普通c代码+关键函数,就构成了连接应用程序和操作系统的关键所在。

2023-10-09 20:07:12 41 1

原创 HIT操作系统学习——系统启动背后的故事

我们看ss和sp这是什么意思呢,由代码可以看到,ss=0x9000,sp=0xFF00,组合ss是栈的地址,而sp是栈顶指针的地址,也就是压栈的时候数值压到0x9FF00的地址处,FF00H转化为十进制非常大,是65280,即偏移量为65280个字节,sp的地址其实就是选取了一个距离要操作的地方的一个比较远的位置,防止对操作位置的数据进行修改。这是很重要的,因为后边的操作还需要用到这些信息,必须确保不会被改变,然后pop操作将存储的寄存器数据重新弹出到寄存器内,注意这里是和压栈时相反的顺序,因为栈的特性。

2023-10-05 19:04:30 54

原创 浅谈智能指针

若使用智能指针来管理堆内存的空间,那么在包含堆内存分配语句的代码块结束时,会自动调用智能指针的析构函数来对分配的内存进行释放,大大提高了代码的安全性,降低了编码复杂度。

2023-09-29 13:51:57 15

原创 数据库学习——约束

约束是作用与表中字段上的规则,用于限制存储在表中的数据。

2023-09-29 09:10:34 20

原创 洛谷 P1883——函数 题解

但是具体的函数图像单调性并不太清楚,到底是单调增还是减,又或者是抛物线形状,又或者是其他,清楚函数的单调性,决定了我们究竟选用二分法还是三分法来求这个最值。从图中我们不难看出,F(x)函数为下凹函数,所以可以使用三分法来寻找区间内的最大值。又由提示可知,a>=0,所以f(x)的函数图像一定是下凹函数或者单调递增递减函数。,题目最终要求的是F(x)在[0,1000]的区间内的。(x)(

2023-09-25 19:11:36 61 2

原创 hud 3400——Line belt 题解(三分套三分)

函数是一条抛物线,我们想要得出函数的最小值,就不能再使用二分法了,因为二分法要求数据一定时单调递增或递减的。分析题目我们容易知道,要求这一段时间的最小值,一定可以在AB和CD上分别找到一点X和一点Y,使得走完整段路径的时间最短。显然的每一个x位置的时间总和又构成了一个上图的抛物线函数,我们再使用依次三分法,将时间总和的最小值求出。继续思考,每一个X都对应着一段XY~YD的最小时间值,这一X位置的时间总和为。这三条边的长度都在变化,这样显然不易于分析理解。显然,X,Y都在移动,这样就使得。

2023-09-24 13:45:15 41 1

原创 P1419——寻找段落(洛谷)

题目中告诉我们段落的定义是在[S,T]区间的可变部分,因为是一个区间,可以联想到滑动窗口,单调队列维护区间内容等问题,但是本题的区间范围并不是定长,所以更适合使用单调队列来维护区间单调性。本题需要考虑前缀和的处理方法,因为区间是连续的,想要获得某一段区间内容的和,只需要sum[i]-sum[i-t];]的区间内,且数组中任意一段连续的序列的平均值都不会超过这个区间。**2.**单调队列维护的区间范围控制,单调队列维护的区间应该在[S,T]之间,所以我们应该判断,当。的前缀和在当前情况下是一定的,那么。

2023-09-23 10:39:09 245 3

原创 二分法——区间与选择

当a[mid]>=x时,为什么mid可以赋值给了r呢?是包括在区间内部的,所以当a[mid]>x时,r不能等于mid,因为mid处的值已经被判断为了比x大,应该将mid排除在区间外,但是如果a[mid]= =x同时与a[mid]>x同时存在时,r若不等于mid(即r= =mid-1),那么就直接将a[mid]= =x这种mid的情况排除在了区间外,这样子无法得到正确的结果,所以a[mid]>x与a[mid]= =x分开来判断。表示——>a[mid]>x。a[mid]==x,因为端点。

2023-09-22 22:12:48 180 1

原创 序列划分(二分法)——最大值最小化

一个序列的子序列,他的最大值可能的区间为——最小情况:序列的单个元素的最大值(即只把一个元素划分为一个子序列),最大情况:序列的所有元素的总和(即把所有元素划分为一个子序列)。返回的cut值为2,表明只分成了两个子序列,比三个子序列小,说明最大值选择过大,将右区间缩小为11,再次寻找新区间的中间的值。我们还是以序列{2,2,3,4,5,1}为例,当传入的最大值为11时,故区间就为 : [max,sum];二分查找的目的,就是为了更快的查找到。(这里很绕,多去理解一下)。

2023-09-22 10:51:34 790 3

原创 哈夫曼编码的译码和解码全代码

哈夫曼编码译码全代码

2023-09-10 15:46:33 104 1

原创 友元类的作用

当你使用电视机时,开关电视机以及换台调声音都是通过遥控器来完成的,我们不可以直接通过电视机来调整它的属性。从这里就可以体会到,电视机为遥控器提供了可以修改其私有化属性的接口,而遥控器为我们提供了可以**间接**或**直接**修改电视机属性的接口。

2023-09-10 07:19:19 49 1

IO(异常&File&综合案例).md

IO(异常&File&综合案例).md

2023-05-14

空空如也

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

TA关注的人

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