- 博客(21)
- 收藏
- 关注
原创 c++差分:
#include<iostream>using namespace std;const int N=100001;int n,m;int a[N],b[N];void insert(int l,int r,int q){ b[l]+=q; b[r+1]-=q;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i])
2024-05-04 17:01:59
190
原创 c++算法前缀和以及子矩阵的和
这个代码解决的就是一个求输出原序列中从第 l 个数到第 r 个数的和的问题,其实很多同学想到就是可以直接暴力来计算,但是如果询问的次数太多会不会 超时呢,这是一个值得我们思考的问题?现在我们用代码来表示:用 i 和 j : s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];前缀和就是用一个数组去表示给定数组的和是sum[i]=a[1]+a[2]+......+a[i];在上述前缀和的基础上从一维到二维。
2024-05-04 16:53:42
413
1
原创 python数据容器
将字符串指定元素修改,但是应为上边说了字符串不可以修改,所以这个有返回值,即替换后的字符串,原字符串是不变的.(用replace替换也是生成新的字符串)元组由上述列表的嵌套,和那些方法,这里就不一一叙述了.(应为不可以修改所以上面的插入,删除,修改值均不可以用,只能用index,count,len..split(")将字符串按照括号内的形式分割,也是不会修改,只是返回一个列表,该列表的元素就是分割后的元素。数据容器是一种能够容纳多份数据的数据类型,且每一个元素,可以是任意类型的数据.
2024-05-03 22:49:19
1014
2
原创 高精度除法c++
今天来补以前忘记打卡的一些东西,先来第一个高精度除法,这个东西呢指的是很大的一个数去除以一个小的整数(这里只讲了整数),大的数用longlong都不够所以我们用了string,那么接下来请看代码。一会儿我会发前缀和,子矩阵的和等一系列讲解及代码。以上就是代码了,然后在代码里的r是余数。
2024-05-03 15:18:48
277
1
原创 区间和(离散)
然后,程序会根据find函数找到x在alls中的位置,并将对应的a[x]值增加item.second。这是一个去重的操作,就是你首先把整个alls的说有数据传入unique中去,这个函数是去重的,返回的是去完重之后的最后一个元素的位置,然后erase再删除现在去完重之后的最后一个元素的位置到原本alls里最后一个元素的最后一个值,便实现好了去重.今天学的整数有序离散,感觉比前边讲的都难些,那就来讲讲这道题,其实这道题,给我的第一感觉使用线段树或者树状数组来做都是可以的,但是今天学的离散那就用离散来写.
2024-05-01 20:28:42
918
3
原创 c++高精度加法
不管法一法二我们都需要注意的东西就是在输出时,的顺序,应为我们的习惯输进去的string类型时123456,那么编号为0那里是1;所以一定要注意,当你在看结果时,发现最高那位和预期不一样可以看看自己是否打印反了。法一其实也相似,大同小异,只不过在有些表达上不一样,比如x = (p1 >= 0)?这个就是在判断有没有输出完,与下面的add里for里的if里的内容意思相似。上述两种便是加法,我们是定义了容器,将string类型啊a,b的每个数字放入容器中,如何在add里进行计算(法二)
2024-04-28 22:07:21
265
原创 c++算法之二分法
其实很多时候光听别人说是不懂的,我觉得看代码理解得更快大家可以去试试,在看代码的时候顺便去跟着带一下值说不定一下就明白了;其实我觉得二分无非就是找目标值在你分段的哪个位置其实并不复,就不过多累述了.如果大家看了我前边的排序,可能会发现我并没有写得很详细,我觉得我写出来的我能看懂,因为我觉得什么都写得很清楚缺了些自己的思考.如果大家觉得自己理解到了二分排血的话,其实可以去做做求逆序对的题。通过学习发现二分法其实没有想象之中那么难,思路理清楚,还是会发现这一类的题是有模板的;
2024-04-28 00:03:57
269
原创 归并排序c++
思路就是这个样子滴,如果对于这幅图不是很理解的话,大家可以去看看分治是什么,也可以是直接看下面代码.如果觉得懂了的话就可以去试试做逆序对.下面我们来看看板子代码。
2024-04-27 09:52:35
149
原创 排序算法 之 快速排序
就是选择一个节点,节点右边都是比该节点大的,节点左边都是比该节点小的值,当你遍历完也就完成了快速排序.(这篇文章不会对这三中排序的时间复杂度进行讲解,下篇文章讲)首先说说节点,节点是任意的你可以 选择左到右的任意一个节点,这个不会有要求,但是当遇到一些题的数据是加强了的时候,节点的选择就可能会影响你能否ac了.今天我们来讲一种相较于冒泡排序和选择排序更高效的一种排序方法------快速排序.上述代码是一个基本的板子,大家可以先看上述代码再看下面这个代码(这个代码有注释)
2024-04-25 17:01:58
167
1
原创 最矮的巨人
操场上有N x N个“巨人”按N行N列的矩阵形式列队,请编程找出该方阵中所有“最矮的巨人”。所谓“最矮的巨人”是指,该巨人在其所在行中,身高最高(没人比其更高);且在其所在列中,身高最矮(没人比其更矮)。
2024-02-21 17:54:00
350
原创 链表 和 如何进行逆转链表
首先我们来讲述下思路,就是建立两个指针下x,j(x表示先前的,j表示当前的)我们用这两个指针一前一后去访问,如何j的指针指向x所在节点,x到j的位置去,然后j指向下一个 这个过程可能文字比较不易懂那我们直接看码。与数组不同的是每个节点不能通过下标进行直接访问,并且每个节点的位置也不是像数组里的数一样相邻,链表里的节点只能从首到尾逐个访问.链表是一种基础的数据结构,但是并不是像数组那样按顺序存储数据,而是在每一个节点里存指向下一个节点的指针.Listnode node4 = { 4,&node5 };
2024-02-21 13:18:53
424
原创 c++中的vector
我们在上边说了{vector(容器)(本质和数组一致)不过其对象长度不定.}这句话,那么这个长度不定我们该如何体现呢?我们可以通过添加元素来体现 eg. v3.push_back(66) 代表在v3里添加一个为66的元素.vector<int>v;vector<long>v3(5) 代表五个long类型的v3容器若()里写的是(5,100)就对这五个容器进行赋值了。vector<char>v2={'a','b','c'}(=可以省略)vector(容器)(本质和数组一致)不过其对象长度不定.
2024-02-19 22:21:27
154
1
原创 关于区别i++和++i
方便记忆,我们可以直接去看➕的位置,➕在i前就先➕再赋值(++i),➕在i后就先赋值再加(i++),但不管➕在哪个位置i都=2。相信对于大多数刚开始学习c语言的朋友们来说,这个问题在困扰着你,实际上这是个特别简单的问题。我们让a=i++,得到的是a=1,i=2。a=++i,得到的是a=2,i=2。
2024-02-19 10:34:49
252
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅