自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Rotch的博客

致力于分享 OI 算法、经验;课余分享 Windows 开发心得

  • 博客(26)
  • 资源 (2)
  • 问答 (3)
  • 收藏
  • 关注

原创 汇编语言-001:系列引入与硬件基础

汇编语言教学第一课

2021-12-12 22:14:06 784

原创 OI退役笔记-024:数据结构(四)线段树

目录引入概念线段树的实现初始变量建树单点修改区间询问延迟标记应用延迟标记的区间修改应用延迟标记的单点查询对区间修改+区间求值的探讨标记下传(Lazy-Tag,懒标记)应用标记下传的区间修改应用标记下传的区间查询线段树与其他类似算法的比较六一节快乐,祝我这个巨婴 happy everyday引入线段树是一个恶心的东西线段树与树状数组类似,可以快速的进行区间修改、区间求值,也可以像 RMQ 一样求区间最值。概念线段树是一棵二叉树,每个节点对应一段区间的解。如图,对于一个数列 A,A[i] =

2021-05-31 23:33:12 188 2

原创 OI退役笔记-023:数据结构(三)RMQ

RMQ 用于求解区间最值问题。比如有一个数列,共 1e9 个数字。共计 1e8 次询问区间 [l, r] 中的最大值。(0 < l ≤ r ≤ 1e9)。RMQ 本质就是分治(二分或倍增)思想。但这些无所谓,只需掌握的就是 RMQ 会将问题转化为max{l, ..., r} = max(max{l, ..., mid}, max{mid + 1, ... r});需要注意的是,前后两段区间可以重复,因为两段区间的长度都是 2k,k 是使 2k < r - l + 1 的最大整数。模板#i

2021-05-27 23:34:41 171

原创 OI退役笔记-短记:NOIP 的内存限制

NOIP 的内存限制一般是 128MB,时限 1s。内存大概可以开:int a[(int)10e7];而省选一般是 512MB,但数组也不能开太多。至于开数组所耗时间可以忽略不计:int main(){ int *n = new int[10000000000];}测试用时也就一毫秒但是数组最好要开全局,动态申请内存至少目前还不太需要。...

2021-05-27 23:19:10 765 1

原创 OI退役笔记-022:数据结构(二)树状数组

本篇博文以代码及注释形式呈现,其中的公式图片在代码后面。#include <cstdio>// 树状数组:单点修改 + 区间求值 // 初始化// 对于数列第 i 个数 a,updateV(i, a) 即可 int n, c[100010];// lowbit(int)// 返回整型数字二进制末尾有多少个 0// lowbit(x) = x & (~x + 1) = x & (-x) inline int lowbit(int _x) { return

2021-05-24 21:53:25 118

原创 OI退役笔记-021:数论(五)欧拉定理

目录欧拉函数定义欧拉函数通式欧拉函数性质欧拉函数实现快筛欧拉函数欧拉函数定义在数论,对正整数 n,欧拉函数是小于或等于 n 的正整数中与 n 互质的数的数目(因此 φ(1) = 1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为 Euler’s totient function、φ 函数、欧拉商数等。 例如 φ(8)=4,因为1, 3, 5, 7 均和 8 互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。欧拉函数通式Π 表

2021-05-14 22:23:47 169

原创 OI退役笔记-019:图论(六)LCA

二分图

2021-05-13 22:58:54 124

原创 OI退役笔记-018:图论(五)强连通分量(割点、割边、缩点)

最近一直在学图论,笔记的第 9 篇记了一些基本概念,一直比较忙就没更新。笔记的15 ~ 17 篇记录的是最短路、二分图、最小生成树之类的,有时间补充完。强连通分量在第 9 篇已经讲了,目前求强连通分量的算法里面 Tarjan 算法值得学习。所以本篇只讲 Tarjan 算法。一、强连通分量求强连通分量,其一定是一个有向图。因此我们定义两种边:假设一个图是连通的,选定一个节点为根节点,其中蓝色的边由父结点指向子节点,称为父子边;红色的边由子节点指向父节点或父节点以上的点成为返祖边。其中父子边.

2021-05-05 11:06:12 217

原创 OI退役笔记-015:图论(二)最短路(Floyed、Dijkstra、Bellman-Ford、SPFA)

最短路

2021-05-05 08:42:13 97

原创 OI退役笔记-013:基础算法(六)深搜及剪枝

搜索的时间复杂度非常高(指数级别),难以应付信息竞赛要求,因此再搜索时加以剪枝,不取搜索不必要的“枝叶”,减少时间复杂度。原则一:正确性剪枝所剪去的是不必要搜索的地方或重复搜索的地方。如果所需要的枝干被剪掉了,那么无论怎么优化都没有意义了。原则二:准确性准确且多的判断不能通向正解的枝原则三:高效性利用正确解的必要条件,减去尽可能多的枝矛盾:若减去非常多的枝,则增加了判断的数量,有可能减小甚至抵消剪枝带来的优化效果,需正确处理二者的关系。基本技巧:优化搜索顺序排除等效冗余几个枝是

2021-05-04 16:38:03 183

原创 OI退役笔记-012:基础算法(五)二分与三分

二分,即折半查找。首先,二分三分必须满足顺序结构、有序储存。抽象一点,就是 F(x) 且 对 x 满足单调性,用 F(x) 接近 target 来二分。先看一道简单的例题:这是道明显的二分题:求最小值中的最大值。解决此类问题需要用二分答案。但首先要明白,二分答案不是用那邪恶的 l 和 r 来算出答案,而是在一定区间内试出答案:在本题样例中中,4 是答案,则有:也就是说,每次确定一个值,再配合贪心、DP 等算法验证答案是否正确。若正确,则可能还有更正确的;若错误,则调整去找正确的。本题程序

2021-05-04 14:48:21 363

原创 OI退役笔记-011:基础算法(四)贪心

〇、贪心的特点1、贪心的选择:  贪心将原问题变为多个相似的但规模更小的子问题,而后的每一步都是当前看似最佳的选择,且这种选择只依赖于已做出的选择,不依赖未做出的选择。2、最优子结构:  执行算法时,每一次得到的结果虽然都是当前问题的最优解(即局部最优解),当且仅当满足全局最优解包含局部最优解时,才能保证最终得到的结果是最优解。一、贪心的例子1、最优装载问题  给 n 个物品,第 i 个物品重量为 wi ,选择尽量多的物品,使得总重量不超过C。【算法】  把所有物品按重量从小到大排序,每次

2021-05-04 11:34:10 223

原创 OI退役笔记-010:图论(一)基本概念

图论-概要1〇、图的定义一、图的基本概念1. 无向图(Undirected Graph)与有向图(Undirected Graph)2. 度(degree)、入度(indegree)、出度(outdegree)3. 子图(subgraph)4. 路径(path)、回路(circuit)、权值(weight)![1](https://img-blog.csdnimg.cn/20210304223924773.png#pic_center)5. 连通(connected)、强连通(strongly connec

2021-03-04 23:07:11 1584 1

原创 OI退役笔记-008:基础算法(二)背包问题(背包九讲)

关于背包背包问题是信息学竞赛里一类重要的问题。背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。相似问题经常出现在商业、组合数学,计算复杂性理论、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?(百度百科)一、0-1 背包基本思路:可以用二维

2020-12-01 22:50:56 262

原创 OI退役笔记-007:数据结构(一)栈

栈栈是一种先进先出的数据结构实现typedef int stype;stype stack_base[10010];int length = 0;void push(stype val){ stack_base[length++] = val;}bool empty(){ return length();}int pop(){ if (!empty()) return --length(); return -1;}void clear(){ length

2020-11-10 22:49:47 101

原创 OI退役笔记-006:基础算法(一)递推

递推问题求解过程:确定状态可以看有多少个未知数;递推关系即将 f[i] 用之前推出的值表示;最后用程序实现就简单了。例1. 斐波那契数列简单,不赘述。f[1] = 0;f[2] = 1;f[i] = f[i - 1] + f[i - 2];同样,走楼梯问题、多米诺骨牌问题公式相同,因为其递推关系相同多米诺骨牌问题走楼梯问题一个人爬楼梯,每次只能爬1个或两个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法?走楼梯问题和多米诺骨牌问题其他解法:第一列若是一阶或

2020-10-06 11:15:31 235

原创 OI退役笔记-000:知识索引

记住点击收藏,以防文章丢失。 点击查看博主主页函数索引_itoa()Euler()exgcd()gcd()qgcd()qmPow()qPow()quick_euler()语法索引欧拉筛STL 使用

2020-10-04 19:26:51 155 1

原创 OI退役笔记-短记:函数 itoa() 自定义实现

列题:很容易就写了个代码:#include <cstdio>#include <cstdlib>#include <cstring>char a[50], b[10];bool check(){ int t = strlen(a) / 2; for (int i = 0; i < t; ++i) { if(a[i] != a[strlen(a) - i - 1]) return false; } return true;}

2020-10-04 19:08:34 149

原创 OI退役笔记-005:基础知识(一)STL 的使用

int Euler(int n) //1.直接求欧拉函数的值{int rea=n;for(int i=2; i*i<=n; i++)if(n%i0)//第一次找到的必为素因子{rea=rea-rea/i;while(n%i0){n=n/i;//把该素因子全部约掉}}if(n>1)rea=rea-rea/n;return rea;}int pp[20000];for(int i=1; i<=maxn; i++)pp[i]=i;for(int i=2;

2020-10-03 20:08:02 249 1

原创 OI退役笔记-004:数论(四)线性同余及其方程组(中国剩余定理、扩展中国剩余定理)

总览C++ 相对于 C 的最大区别就是 C++ 引入了类。而 C++ 的官方就运用类封装了一些模板,称之为“标准模板库” (Standard Template Library)竞赛常用的标准模板库有:// 算法库#include <Algorithm>// 字符串#include <string>// 变长数组#include <vector>// 队列#include <queue>// 双端队列#include <deque&

2020-10-01 22:53:18 220

原创 OI退役笔记-003:数论(三)约数(GCD、LCM、EXGCD)

约数约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。有关约数的一些公式设一个数为A, 分解质因数得 A=a1b1 * a2b2 * a3b3 * … * anbn[a1、a2、a3 … 表示不同的质因数;b1、b2、b3 表示每个质因数的次方数(即相同质因数的个数)]则有:A的约数的个数 = (1 + b1) * (1 + b2) * (1 + b3) * … * (1 + bn)A的约数的总和 =

2020-09-30 23:25:49 195

原创 OI退役笔记-002:数论(二)素数(欧拉筛)

素数素数又称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。埃拉托斯特尼筛法基本原理:当需要求某一区间 [2, n] 内的所有素数时,可以从2开始,对于当前素数p,将 p2 后所有 p 的倍数筛去。每次找到下一个没有被筛到的数就是一个素数。时间复杂度:O(n*lglgn)空间复杂度:O(n)图示:需加语句、头文件:#include <cstdio>int n; // [2, n] 区间bool v[10010]; //标记// v[i] =

2020-09-25 21:59:28 303 1

原创 OI退役笔记-001:数论(一)基础(基础知识、前缀和、差分、快速幂、快速乘)

OI退役笔记-001:快速幂及其取模运算1.快速幂原理快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。以 2^11 为例,其等于 2^0 * 2^1 * 2^3。若从 11 逆推,则:用 r 表示结果; 用 base 表示底数。r = 1,base = a11 % 2 = 1,11 / 2 = 5r *= base = base ^ 1,base = base * ba

2020-09-24 20:39:41 484

原创 C++ Windows编程(二):Windows SDK 使用及消息循环机制的了解

C++ Windows编程(二):Windows SDK 使用及消息循环机制的了解示例代码:// 必要的头文件#include <windows.h>// 处理消息的函数LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { ...

2020-04-02 13:06:26 293

原创 C++ Windows编程(一):环境

C++ Windows编程(一):环境编译器选择:推荐使用 Visual Studio,版本2013~2019(本人比较熟悉并偏爱的版本)。也是几乎唯一一款自动搭载许多预定的开发库(最新的 Windows SDK,MFC,ATL 等)下载地址:微软官网即可(免费,需注册)环境配置:首先打开 Vosual Studio Installer(这里使用目前最新版配置 Visual Studio...

2020-04-02 10:55:17 396

原创 庆祝祖国七十岁生日

庆祝祖国七十岁生日今年是 2019 年,祖国成立了整整七十年,谨代表本人向为了新中国繁荣昌盛作出贡献的人们致敬!谨代表本人祝祖国尽早实现伟大复兴,再创辉煌!...

2019-09-30 19:27:21 286 1

Free Editor A1.5.2.exe

C++ Win32 API 开发的 多文档记事本,基本实现大部分编辑器功能,已发布 A1.2.2 版本的源码,欢迎下载!

2019-08-07

Free Editor.rar

Free Editor 是一个多文档编辑器,本资源包括五个文件:main.cpp, main.h, File.h, def.h, resource.rc。方便大家学习 WINAPI 开发 MDI 程序。当前版本为测试版 1.2.2,也是第一个发布版本。有 BUG 欢迎提出! (ps. 在编译器里链接 resource.rc,直接编译 main.cpp 即可)

2019-07-31

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

TA关注的人

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