自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

baymax先生的博客

有皱纹的地方,证明微笑存在过。

  • 博客(33)
  • 收藏
  • 关注

原创 数列分块入门练习题一

几个词语的相关解释:区间:数列中连续一段的元素;区间操作:将某个区间[a,b]的所有元素进行某种改动的操作块:我们将数列划分为若干个不相交区间,每个区间称为一个块;**整块**:在一个区间操作时,完整包含于区间的块**不完整的块**:在一个区间操作时,只有部分包含于区间的块,即区间左右端点所在的两个块分块入门 1传送门这是一道能用许多数据结构优化的经典题,可以用于不同数据结构训练。数列分块就是把数列中每m个元素打包起来,达到优化算法的目的。以此题为例,如果我们把每m个元素分成一块,共

2021-08-23 15:40:02 146

原创 Headmaster‘s Headache

Headmaster’s Headache传送门参考:算法竞赛入门经典(第二版)P286.本题做法很多,但是我是不会的,一种相对容易实现的做法是:用两个集合s1恰好表示有一个人教的科目的集合,s2表示至少有两个人教的科目集合,而d(i,s1,s2)表示己经考虑了前i个人的最少消费。注意,所有人一起从0开始编号,则编号0~m-1是在职教师,m到n+m-1是应聘者,状态转移方程d(i.s1.s2)=min{d(i+1,s1’,s2’)+c[i],d(i+1,s1,s2)},其中第一项表示聘用,第二项表示不

2021-08-23 10:43:12 142

原创 Corn Fields(状压Dp)

由数据我们可以清楚的知道,这道题是状压dp读入之后,我们用p[i]来表示第i行上的草地情况,f[i][j]表示前i行状态为j时的方案数。首先我们考虑实例;我们可以看到,在只考虑第一行的的时候,就有五种情况,0 0 0 0 1 0#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>#include

2021-08-21 10:40:19 284

原创 互不侵犯king

这是我第一次接触状压dp,对于状压dp,我一开始天真以为仅仅是用二进制数表示状态,通过位运算解决问题。后来发现还真是,哈哈 。这道题已经像是一道模板题了,现在我们从微观角度,开始剖析他。题目大意:在一个n*n的图中选k个点,使得以每个点为中心的九宫格内有且只有他一个点。求方案数。题解:首先我们先理解状态压缩,就是把一种状态压缩成一个数,以节省空间,否则种类的多少,就是几维数组,一旦大小达到10的五次方,基本TLE就不远了。举个例子:一个位置1代表有国王,0代表没有国王,101001,就应该用一

2021-08-21 09:49:03 128

原创 B - Making the Grade

传送门题意大致是:给你一个序列A,你可以改变其中任意多个元素的值,使其变成单调序列B,花费的代价是| Ai - Bi | ,让你求最小代价思路:不要问我状态转移方程怎么来的,好像是数学归纳法我们用 dp[i][j]表示前i个数构成的序列中的最大值为j,dp[i][i]代表相应的花费。所以有dp[i][j]=min(dp[i-1][j])+|p[i]-q[j]|;#include <iostream>#include <algorithm>#include <c

2021-08-19 08:23:33 77

原创 初学动态规划

文章目录A - Mr. Young's Picture PermutationsA - Mr. Young’s Picture Permutations传送门#include <iostream>#include<algorithm>#include<cstring>#include<cstdlib>using namespace std;const int N=31;#define ll long longint main(){..

2021-08-16 14:37:50 87

原创 二叉搜索树,平衡树,double queue Version Controlled IDE Play with Chain Tyvj 1729 文艺平衡树 普通平衡树 平衡树·Splay

文章目录A - Double QueueB - Version Controlled IDEC - Play with ChainD - Tyvj 1729 文艺平衡树E - 普通平衡树F - 平衡树·SplayA - Double Queue#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#includ..

2021-08-13 11:14:39 115

原创 vector的使用

文章目录1、定义与初始化对象2、列表初始化3、创建制定数量的元素4、创建二维数组5、向vector中添加元素6、vector的基本操作7、使用迭代器8、例题标准库类型的vector表示对象的集合,其中,所有的对象都有相同类型;(就是动态数组,扯那多呢?)//必须包含的头文件:#include<vector>using namespace std;1、定义与初始化对象vector<string> s;//默认初始化,s中不包含任何元素;//事实上,最常见的方式是先..

2021-08-10 10:35:46 115

原创 扫描线求面积,求周长。

大佬的讲解,看完豁然开朗https://www.cnblogs.com/KonjakJuruo/p/6024266.html#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;const int N=1100,INF=(int)1

2021-08-06 09:20:10 90

原创 线段树加强篇

文章目录A—Data Structure?详情链接A—Data Structure?本题找第L小的数,就是找第几个1;找到后将这个数删除,就是将这个1变成0;向上更新,两项的和。#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <queue>#include <cmath>#includ..

2021-08-05 16:37:23 131

原创 2021-08-05初学线段树+扫描线(求矩形面积)

利用扫描法算矩形的面积:对竖边所在横坐标进行排序:10,15,20,25;入边:相应区间+1;出边:需要消除影响-1;入边第一条边:[10,20]+=1;S1=(15-10)*(20-15);入边第二条边:[15,25.5]+=1;可得[10,15]=1,[15,20]=2,[20,25.5]=1;s2=(25.5-10)乘(20-15);出边第三条边:[10,20]-=1;[15,25.5]=1;s3=(25.5-15)乘(25-20);出边第四条边 [15.25.5]-=1;.

2021-08-05 10:01:17 95

原创 线段树 树状数组 离散化相关例题

文章目录A—敌兵布阵B—Lost CowsG—Buy TicketE-----l Hate ItD-Just a HookF——Ultra-QuicksortH——StarsC—Major‘s postersI—A Simple Problem With InteqersA—敌兵布阵#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#inc..

2021-08-04 10:11:34 121

原创 acwing 801 位运算

#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <queue>#include <cmath>#include <map>using namespace std;const int N=1005;int value[N][N],cha[N][N];int low(int x){ .

2021-08-02 11:35:18 66

原创 acwing795,796,797,798 前缀和,二维前缀和,差分,差分矩阵

文章目录前缀和前缀和矩阵差分差分矩阵前缀和输入一个长度为 n的整数序列。接下来再输入 m个询问, 每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l个数到第 r个数的和。输入格式 第一行包含两个整数 n和 m。 第二行包含 n个整数,表示整数数列。 接下来 m行,每行包含两个整数 l 和 r, 表示一个询问的区间范围。输出格式 共 m行,每行输出一个询问的结果。数据范围 1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例: 5 ..

2021-08-02 10:31:33 109

原创 acwing 794 高精度除法

#include<iostream>#include<algorithm>#include<queue>#include<cstdio>using namespace std;int r;vector<int> add(vector<int >&a,int b,int &r)//余数要加引用{ vector<int>c; r=0; for(int i=a.size().

2021-07-31 21:23:46 73

原创 acwing 高精度乘法(根据减法改编)

#include<iostream>#include<algorithm>#include<queue>#include<cstdio>using namespace std;bool cmp(vector<int >&a,vector<int >&b){ if(a.size()!=b.size()) return a.size()>b.size(); for(int .

2021-07-31 20:58:38 66

原创 acwing 792高精度减法

ACWing 792 高精度减法题目:#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;bool cmp(vector<int>&a,vector<int>&b){ if(a.size()!=b.size()) return a.size()>b.

2021-07-30 18:56:46 84

原创 c++中cin的加速

在ACM里,经常出现 数据集超大造成 cin TLE的情况。这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论。其 实像上文所说,这只是C++为了兼容而采取的保守措施。我们可以在IO之前将stdio解除绑定,这样做了之后要注意不要同时混用cout和printf 之类。在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除ci

2021-07-29 16:31:47 4726 2

原创 acwing 154 移动窗口

给定一个大小为 n≤106 的数组。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 k 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。窗口位置 最小值 最大值你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。输入格式输入包含两行。第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。第二行有 n 个整数,代表数组的具体数值。同行数据之间用空格隔开。输出格式

2021-07-29 15:15:34 65

原创 高精度加法

AcWing 791.高精度加法题目描述给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例1223输出样例35#include<iostream>#include<cmath>#include<vector>#include<string>#include<algorithm>using namespace std;cons

2021-07-29 11:00:55 72

原创 头文件的使用(不会就全打上)

文章目录include< iostream>include < algorithm>扩展:priority_queue 优先队列include < cstdlib>include < cstring>1 strcpy2 strncpy3 strcat4 strncat5 strcmp6 strncmp7 strchr8 strrchr9 strspn10 strcspn11 strpbrk12 strstr13 strlen14 strerror15 s..

2021-07-28 18:37:47 633

原创 H - Eight

#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<unordered_map>//用于哈希操作#include<queue>#define x first#define y second#define outt cout<<t<<endl;#define debug cout&...

2021-07-28 09:04:47 134

原创 C++ STL之映射map的使⽤

C++ STL之映射map的使⽤map 是键值对,⽐如⼀个⼈名对应⼀个学号,就可以定义⼀个字符串 string 类型的⼈名为“键”,学号 int 类型为“值”,如 map< string, int> m; 当然键、值也可以是其它变量类型~ map 会⾃动将所有的键值对按照键从⼩到⼤排序, map 使⽤时的头⽂件 #include < map> 以下是 map 中常⽤的⽅法:#include <iostream>#include <map>#incl

2021-07-28 08:44:49 107

原创 string使用详解

文章目录1.准备2.初始化3.赋值4.访问5.连接6.比较7.子串8.交换9.查找10.替换11.插入12.删除13.特性描述14.字符串流处理acwing1.准备首先,需要做这样的事情#include #include using namespace std;//之后就可以体验string内置的各种强大功能了—string相关迭代器//返回string的起始位置const_iterator begin()const; iterator begin();//返回string的最后..

2021-07-28 08:41:23 197

原创 链式前向星+最短路的板子

/** * 关于优先队列怎么使用:https://www.acwing.com/blog/content/3417/ **/int h[N], e[M], w[M], ne[M], idx;int dist[N], st[N];//表示该是否已经确定//h头节点 e表边 w表示边权值 ne 表示下一条与起点连接的边的编号 idx 表示边的数量以及最新插入的边的编号typedef pair<int, int> PII;//记录节点的编号以及到节点的距离void add(int

2021-07-28 08:29:30 80

原创 acm模板1

文章目录扩展域并查集*带权并查集例题poj1163最大子段和矩阵连乘滑雪最长上升子序列最长公共子序列扩展域并查集/** * 扩展域并查集 * 例题链接:https://www.luogu.com.cn/problem/P2024 **/ #include <iostream> #include <algorithm> #include <cstring>using namespace std;#define endl "\n"const i..

2021-07-28 08:27:39 86

原创 poj1315 Don‘t Get Rooked (dfs加回溯)

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char da[108][108]; int hs[108][108];int ans;//全局变量记录放车数量的最大值。int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int n;void update(int ..

2021-07-28 08:10:00 86

原创 小白都要会的基本操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录最大公约数与最小公倍数快速乘与快速幂二分查找素数打表常规思路:埃氏筛法欧拉筛法前缀和与差分(1)前缀和差分搜索最大公约数与最小公倍数int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}利用STL中的函数#include<stdio.h>#include<algorithm>using n

2021-07-27 20:19:38 106

原创 自己复习用-----并查集

有一道经典的题目,就是下面这个问题。不多说了,直接开始。find函数找根节点基本有这两种方法:第一种递归:int find(int x){ return x == pre[x] ? x : find(pre[x]);}第二种:int find(int x){ int root, temp; root = x; while(root != pre[root]) root = pre[root]; while(x != root) { temp = pre[x]; p

2021-07-27 11:21:18 113

原创 最短路问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、朴素的Dijkstra(1)算法学习。1、主函数2、被调函数(2)拓展(链式前向星)1、被调函数2、主函数二、堆优化版Dijkstra算法三、Bellman-Ford算法1、主函数2、被调函数四、SPFA算法五、Floyd算法总结前言本小节讲的是最短路问题,最短路问题共有五种算法,分别为朴素的Dijkstra,堆优化版的Dijkstra,Bellman-Ford,SPFA,Floyd.提示:以下是本篇文章正文内容

2021-07-26 13:06:12 228 1

原创 简单的会议安排问题

简洁来说,会议安排指的是在有限的时间内召开更多会议(两个会议不能同时进行)。会议安排问题本质就是贪心算法的使用。下面进入正题:会议时间表会议i12345678910开始时间bi31525386812结束时间ei64759811101214问题目标:求在14时间内最多的会议个数。做本题的策略就是找到最早开始的时间+持续时间最短的时间的会议。其实就是找到 最早结束时间的会议 。即对结束时间进行排序(由小到大),如果

2021-07-25 21:55:22 818

原创 sort排序的基础使用

首先,sort 排序函数是在c++语言来使用的,使用此函数我们需要引用头文件:#include<algorithm>语法描述为:sort(begin,end);不过使用的话一般是sort(begin,begin+n); 或sort(begin,begin+n,cmp);n代表着需要排序的数目;cmp代表着排序方式,不跟数组数据有关系,这里先不做解释,可以不写cmp,如:sort(begin,end)先尝试一下,注意观察排序顺序;begin,end分别代表首地址和尾地址,例如对s[12

2021-07-25 20:20:38 306

原创 纪念自己的第一次博客

致自己学习算法的开始今天是我第一次写博客,心里非常高兴并打算用心做好以后的每一篇博客,虽然每篇博客可能并不符合规范,写的并不简洁,但是我会用自己的大白话,以我自己的方式,记下学习算法的瞬间,希望我自己能坚持下来,我也坚信自己一定能够坚持下来,这不仅仅是一个任务,这更像是一次旅程,将自己全身心投入其中,感受语言的美好,探索深处的秘密。在我成功将不会的算法搞懂的时候,我会有一种满足感,自豪感。我喜欢这种感觉,这种超脱一切的感觉,更是一种精神食粮,激发着自己的潜力。最后,希望自己能够在算法的道路上,越走越深,

2021-07-25 18:38:44 84

空空如也

空空如也

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

TA关注的人

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