自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈拓展欧几里得算法

有了上面的了解,我们就可以知道,欧几里得算法的底层原理,那么思考下面一个问题,给出。普通的欧几里得算法依据是辗转相除法,也就是,比如求。同样的,我们根据辗转相除法的思路,当。的时候找到最大公约数,此时。等于0,证明此时的原先。的最大公约数就是当前的。那么最小正整数解就是。否则最小正整数解就是。

2023-09-16 11:47:42 178

原创 常见的区间问题

小刀1、区间加前缀和差分复杂度线性(O(n+m))#include<iostream>using namespace std;const int N = 1e6 + 10;int a[N], b[N];// 原数组 差分数组int main() { int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i], b[i] = a[i] - a[i - 1]..

2021-12-14 20:23:39 993

原创 CF赛后总结3:2021-07-22晚 HSSC21-22 div1+2 rating+219

题库链接:link<-----div1+2HSSC21-22题库A题:link 思维题1、题意:只有末尾是9才会满足S(x+1)< S(x)所以判断从1~n里面有多少个末尾是9的数2、转化:直接除10是判断从1~n - 1里面有多少个符合的,所以先判断n是不是以9结尾要是最后答案++#include<iostream>using namespace std;int main(){ int t; cin >> t; while (t--) { i.

2021-11-04 10:15:13 239

原创 CF赛后总结2:2021-07-14晚 ECR111 div2 rating+335

题库链接:link<-----div2ECR111题库

2021-11-03 18:14:18 160

原创 gpedit.msc文件获取管理员权限

删除文件时如果显示的是尚未获得管理员权限,需要活得管理员权限才能做好多事情‘对于非专业版本的win10步骤一:新建文本文档,将下列代码复制进去Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\runas] @="获取管理员权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\*\shell\runas\command] @="cmd.exe /c takeown /f \".

2021-10-24 09:43:50 718

原创 210929算法日记:树状数组

今天刚刚开学提高课(什么,你怎么知道我的基础课还有好多不会的)咳咳,实在是因为只刷题太枯燥了,所以想着刷累了看会儿课,这几天老是听别人讲树状数组和线段树,发现自己也可以学,虽然我很菜,所以下面就对树状数组做了一个小结树状数组是干什么的,简而言之就是平均复杂度的前缀和前缀和应该都知道吧,树状数组能在o(logn)的复杂度内求到前缀和,但是换回的是查询更慢(也需要o(logn))前缀和的查询只需要o1但众所周知,logn几乎是常数,所以这波树状数组完胜首先你得维护一个tree数组,他代表的含义就是树.

2021-09-28 19:10:28 93

原创 210923算法日记:ST表

RMQ问题的简单且高效写法读入后进行预处理,f[i][j]表示以i为起点,长度为2j的区间的最大最小值,预处理过程实施是利用的递推f[2][4]=max(f[2][3],f[2+(1<<3)][3]);//因为预处理时一定能够分成对称的左右区间查询过程中,由于查询区间的不确定性,可能并且大概率会出现区间重叠但不影响最大最小值l=3,r=14len=12;k=3;保证(2^k<=len&&2^(k+1)>=len)所以时log22下取整所以an.

2021-09-23 09:54:27 80

原创 210825算法日记:二叉树

二叉树就是二叉树,一种除了线性表以外的船新的数据结构,下面介绍最简单的二叉树,就是二叉树的建立以及遍历,由于new一个新节点十分耗时间一般都是在结构体中储存左右节点下标一般的二叉树的建立(给出前中遍历或者后中遍历或者直接给出树)二叉树的节点struct node{ int *l,*r; int val;}若是直接给出键值和左右节点可以直接建树若是给出中前序列建立二叉树一般使用结构体指针的写法void build(int l,int r,int &t,node*.

2021-09-23 09:52:32 60

原创 计算机组成原理基础知识

计算机完成一个指令所需要的时间称为一个指令周期顺序程序不具有并发性使用外存储器的信息,应该先把他调入到内存储器进程是程序的执行过程在计算机中,运算器的基本功能是进行算数和逻辑运算理论上计算机的虚拟内存最大容量取决于计算机的地址位数整数在计算机中的存储和运算通常采用的格式是补码在操作系统中,将文件名转换成文件地址的结构是文件目录I/O方式中使计算机系统并行程度最高的是通道计算机中的缓冲技术用于提高主机和设备交换信息的速度总线带宽是指总线的数据传输率,单位时间内总线上传输数据的位数一进程.

2021-09-23 09:49:32 2432

原创 计算机二级:C转C++面向对象编程知识点的总结

相较于我之前学到的c++(c+STL)二级考的才是真的c++,我不想浑浑噩噩过去只想真正的学会,串联起来c和c++的基础语法只是:面向对象编程:在我看来类就是把c松散的函数以及定义打包封装了起来,使得程序看起来更加美妙1、构造函数:调用对象时,系统自动调用默认函数,如果有与之对应的构造函数,系统调用构造函数,构造函数就是创建对象时调用的函数,构造函数在创建对象时就要调用,用于对对象属性的初始化,所有的对象创建时都需要初始化才能完成,如果没有构造函数就会默认一个空参数的构造函数,如果定义的构造函数这个.

2021-09-23 09:09:33 119

原创 210824算法日记:各种进制转换&负进制转换问题

一般的进制转换关系都是先将进制数转化为10进制在用十进制使用倒序取余法转化为其他进制,转化代码为#include<iostream>#include<vector>using namespace std;int is_digit(char c){ if(c>='A'&&c<='F') return c-'A'+10; else return 0;}int main(){ int n;cin>>.

2021-08-25 18:48:11 111

原创 210823算法日记:线段树的搜索路径以及4*n节点的建立证明

[1,10] / \ [1,5] [6,10] / \ / \ [1,3] [4,5] [6,8] [9,10] / \ / \ / \ / \ [1,2] [3] [4] [5] [6,7] [8] [9] [10] ...

2021-08-24 21:45:54 122

原创 210822算法日记:矩阵快速幂

#include<bits/stdc++.h>using namespace std;const int N=2e5+10;struct node{int l,r;int v;}st[N*4];void pushup(int u){st[u].v=max(st[u<<1].v,st[u<<1|1].v);}void build(int u,int l,int r){st[u]={l,r};if(lr) return ;int mid=l+r&

2021-08-23 22:08:11 143 1

原创 210821算法日记:一道题简单题应用dfs与bfs

今天acwing周赛一道题(很简单)卡了我好久,其实很简单,只有24种方案,暴力就行,但考虑到函数next_permutation则可以选择使用更简洁的暴力方法 link#include<iostream>#include<algorithm>#include<vector>using namespace std;pair<int,int>st;string op;int n,m;char a[52][52];bool find(vect.

2021-08-22 18:06:47 72

原创 210820算法日记:树状数组的拓展

众所周知树状数组支持单点加和区间和基础:建立树状数组for(int i=1;i<=n;i++) add(i,a[i])//o(n)的建立树状数组的办法是for(int i=1;i<=n;i++) a[i]+=a[i-1];for(int i=1;i<=n;i++) tree[i]=a[i]-a[i-lowbit(i)];//衍生出来如果开始时a数组里面值全为1建立树状数组如下for(int i=1;i<=n;i++) tree[i]=lowbit(i);.

2021-08-22 17:50:42 76

原创 210819算法日记:单双链表邻接表建点模板

都知道链表是先连新绳再拆旧绳,但是实际操作的时候却总是段错误

2021-08-22 17:50:27 73

原创 210928算法日记:树状数组

今天刚刚开学提高课(什么,你怎么知道我的基础课还有好多不会的)咳咳,实在是因为只刷题太枯燥了,所以想着刷累了看会儿课,这几天老是听别人讲树状数组和线段树,发现自己也可以学,虽然我很菜,所以下面就对树状数组做了一个小结树状数组是干什么的,简而言之就是平均复杂度的前缀和前缀和应该都知道吧,树状数组能在o(logn)的复杂度内求到前缀和,但是换回的是查询更慢(也需要o(logn))前缀和的查询只需要o1但众所周知,logn几乎是常数,所以这波树状数组完胜首先你得维护一个tree数组,他代表的含义就是树.

2021-08-22 10:40:34 101

原创 210818算法日记:三序遍历与正逆波兰表达式(二)

就目前我知道的,前序遍历是没办法直接求结果的,需要转成后序遍历,即后缀表达式来间接求结果,翻转后求出后缀表达式的值乘以-1后缀表达式求值的代码#include<iostream>using namespace std;const int N=100010;int stk[N],tt;bool is_digit(char x){ if(x>='0'&&x<='9')return true; return false;}void va.

2021-08-20 10:37:49 86

原创 210817算法日记:三序遍历与正逆波兰表达式(一)

1、三序遍历1、中序遍历:左子树—>根节点—>右子树2、前序遍历:根节点—>左子树—>右子树3、后序遍历:左子树—>右子树—>根节点对人来说怎样计算最为方便,那必然是中序遍历,一棵树的中序遍历就是我们脑子中的逻辑运算波兰表达式的简介7*(3+6)-5上式这就是中序遍历把他写成前序遍历之后就变成(-*7.+3.6.5.)上式就被称为波兰表达式把他写成后序遍历之后就变成(7.3.6+*5.-)上式被称为逆波兰表达式为什么会出现前缀与后缀表达式..

2021-08-19 14:02:26 182

原创 210816算法日记:模拟数据结构

1、滑动窗口----模拟队列int k;cin>>k;q[++tt]=k;//push操作hh++;//pop操作cout<<q[hh]<<endl;//front操作if(hh>tt)cout<<"YES"<<endl;else cout<<"NO"<<endl;//empty操作单调队列同样解决线性问题,典型就是滑动窗口(有种双端队列的既视感) for(int i=1;i&lt..

2021-08-16 18:50:28 81

原创 210814算法日记:归并逆序对板子&快排第k个数板子&第k个数的stl

1、快排

2021-08-16 18:50:02 55

原创 210813算法日记:二分双函数的用法&dfs的逐渐精通&左右脑问题

1、dfs的逐渐精通

2021-08-16 18:37:15 95

原创 210812算法日记:栈排序&栈排序的最大个数

1、栈排序什么??你没听说过栈排序,你当然没听说过,栈排序不是一种算法而是一种题型,形如2 1 3栈排序后字典序最大的是3 1 2形如2 1 3 5 4先让2、1、3入栈5入栈后出栈4入栈后出栈3、1、2出栈栈排序后最大字典序就是5 4 3 1 2思路:...

2021-08-16 18:02:01 118

原创 210815算法日记:离散化哈希代码模板

1、特殊哈希----离散化link<-----特殊哈希思想离散化求区间和代码2、一般哈希----哈希映射link<-----拉链法模拟哈希表link<-----蹲坑法模拟哈希表3、字符串哈希link<-----字符串哈希模板210815完结...

2021-08-16 10:05:12 51

原创 210811算法日记:高精度(+)的应用&删数问题

1、高精度的应用今天写了一道斐波那契高精加法,一直不会用,因为模板给的是字符串翻转,所以我也想reverse翻转一下,显然我错了,因为斐波那契基数都是个位数,因此每次相加结果都是翻转好的,像f[6]=13而存储在vector中的是31所以不需要翻转,翻转会算错,只要打表后输出结果时倒着输出就好#include<iostream>#include<algorithm>#include<vector>using namespace std;vector&l..

2021-08-12 19:59:19 71

原创 210809算法日记:矩阵旋转&周期填数

1、矩阵旋转1、顺时针右旋270°后与原数组一致说明他已经顺时针旋转90°for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(g[i][j]==gg[j][n-i+1]) cnt90++; } }顺时针右旋180°后与原数组一致证明他已经顺时针旋转180°for(int i=1;i<=n;i++) {..

2021-08-12 16:39:21 261

原创 210808算法日记:再见高精度勇敢向前不要退缩

1、高精度加法模板vector<int> add(vector<int>&a,vector<int>&b){ vector<int>c; int t=0; for(int i=0;i<a.size()||i<b.size();i++) { if(i<a.size())t+=a[i]; if(i<b.size())t+=b[i]; ..

2021-08-11 15:46:20 91

原创 210810算法日记:递归与位运算的完全枚举

1、递归完全枚举酸苦度递归就不用解释了,选与不选回溯就行了#include<iostream>#include<cmath>using namespace std;int s[12],k[12];int ans=0x3f3f3f3f;int t;void dfs(int u,int x,int y){ if(u>t) { if(x==1&&y==0)return ; else ans=mi..

2021-08-11 15:27:00 65

原创 210807算法日记:文件后缀&数据点的生成&洛谷数据点的上传

1、常见的文件后缀后缀名含义.exe可执行程序.txt文本文件.doc/.docx纯文字文件(word).zip压缩包.jpeg/.jpg图片2、数据点的生成#include<iostream>#include<fstream>using namespac estd;int main(){ ofstream out("out.txt"); out<<"zhujinkan..

2021-08-07 18:02:50 1375

原创 210806算法日记:s.count()&递归的参数&字符串c++特性及字符串函数

1、s.count函数判断集合中是否有该元素,有的话返回true也没什么特别意思,就是今天用了好几次,是set里面的特征函数,一般用来找是否集合中存在集合中两个值相加的值等等if(s.count(i)&&s.count(x-i))cout<<i<<' '<<x-i<<endl;2、递归的参数3、c++特征的string以及find函数string不用多说,就是把他当成数字一样处理就行了,但做过子串匹配问题的都知..

2021-08-07 17:33:09 2547

原创 210805算法日记:数据结构的遍历方式&getline()与0&&‘0‘的区别&子串判断的一般方式

1、数据结构的遍历方式当然是范围遍历,迭代器遍历,直接遍历三种了vector支持三种遍历for(int i=0;i<v.size();i++)cout<<v[i]<<endl;for(vector<int>::iterator it=v.begin();it<v.end();it++)cout<<*it<<endl;for(int x:v) cout<<x<<endl;尽量不写auto..

2021-08-05 20:19:20 154

原创 210804算法日记:c++特征函数&段长度&质数范围

1、c++特征函数1、max_element()、min_element()被包含于#include<algorithm>通过指针或者迭代器来作为起止参数,分别返回最大和最小值*max_element(a,a+n);*max_element(a.begin(),a.end()/a.begin()+a.size());*min_element(a,a+n);*min_element(a.begin(),a.end()/傻子才那么写);2、lower_bound、..

2021-08-04 22:19:01 71

原创 210803算法日记:嵌套pair&重载小于号&循环比较的含义

1、嵌套pair要是不想搞结构体直接定义pair会更加方便,但是开始使用时很苦恼pair只能存储两个数据,今天发现可以嵌套pair来实现无限组数据的存储,像==pair<pair<int,int>,int>s[N]==要想简单的表示最好是先宏定义一个#define f first #define s second这样一来s[i].f.f就代表第一个元素s[i].f.s就代表第二个元素s[i].s就代表第三个元素但是碰到需要存储三个元素和他们..

2021-08-04 08:52:20 707

原创 暑假acwing算法总结32:区间DP

2、类似Huffman树的石子合并Huffman树是所有任意两堆石子可以任意合并,但是该DP问题只能合并相邻的两堆,所以用区间DP按照区间长度遍历,先遍历两堆的最小值显然是所有相邻两堆相加,遍历三堆及以上时就要考虑那种更优,通过从l~r-1划线的方式找最优的解,前提是前面的状态已经被计算过像1 3 5前面的状态f(1,2)=4,f(2,3)=8所以在1~2划线f(1,3)=min(f(1,1)+f(2,3),f(1,2)+f(3,3))同理最终状态f(1,n)就是最小值代码#incl..

2021-08-02 11:45:33 66

原创 暑假acwing算法总结31:线性DP

一般的DP问题都没有特定的解法,当然除了背包问题,所以只能找典例,下面介绍一些经典的线性DP问题1、数字三角形代码如下#include<iostream>using namespace std;const int INF=1e9;int a[510][510];int f[510][510];int main(){ int n;cin>>n; for(int i=1;i<=n;i++) { for(int j=.

2021-08-02 10:25:18 52

原创 暑假acwing算法总结30:背包DP

01背包一个背包容量,以后有n个物品分别有其体积与价值,输出满足可以放入背包的物品最大价值每个物品要么取要么不取二维代码#include<iostream>using namespace std;const int N=1010;int f[N][N];int v[N],w[N];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>&gt..

2021-08-01 17:14:15 62

原创 暑假acwing算法总结29:Huffman树与经典贪心

1、哈夫曼树(合并树)贪心问题只要多想多试就没有太大问题对应问题是任意两堆石子合并求花费最小体力的问题,用堆来维护最小值,把最小的放到哈夫曼树的最底层贪心来做得到的就是最小值代码#include<iostream>#include<algorithm>#include<queue>using namespace std;int main(){ int n;cin>>n; priority_queue<int,ve..

2021-08-01 14:36:29 88

原创 暑假acwing算法总结28:区间贪心

1、区间选点(最大不相交区间数量)(区间合并)与之前不同的是脑子里可以有最优解的模型以上三个问题对应到贪心上面都是一个问题对于贪心问题的证明,只要证明子区间改变顺序前后的答案不会更优,这样的整体区间就是最优的,以部分最优推到整体最优,看似目光短浅,但是可以证明他的正确性证明贪心解>=最优解(显而易见)问题是如何证明贪心解<=最优解像区间选点问题,先按照右端点排序要是假如有一个逆序右端点,贪心解会变少,但不是最优解,所以按右端点排序的贪心就是最优解代码#include&lt..

2021-07-31 11:58:12 125

原创 暑假acwing算法总结26:博弈论Nim游戏(ICG)

1、Nim游戏对于博弈论问题通常都是签到题,说难贼难,说简单一般三行代码就搞定,下面介绍一个最经典的博弈论问题,Nim游戏问题公平组合游戏(ICG)游戏先拿两堆石子举例子,如果说是2 3,那么先手必胜,因为先手只需要拿第二堆里面的一个后面根据后手镜像拿就好了必败状态:0 0必胜状态:先手拿完剩下的状态一定是必败状态该状态就是必胜状态定理一:对于n堆石子,如果有 a1 ^ a2 ^ … ^ an 等于0则称该状态是必败状态,反之为必胜状态1 ^ 2 ^ 3也等于0,也是先手必败状态,不一定..

2021-07-31 11:57:50 133

原创 暑假acwing算法总结25:容斥原理

容斥原理的原理根据韦恩图可以得到容斥原理s1∪\cup∪s2∪\cup∪…∪\cup∪sn=[s1+s2+…+sn]-[(s1∩\cap∩s2)+(s1∩\cap∩s3)+…+(sn-1∩\cap∩sn)]+[(s1∩\cap∩s2∩\cap∩s3)+…+…]-…

2021-07-30 23:28:48 187

空空如也

空空如也

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

TA关注的人

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