- 博客(48)
- 问答 (1)
- 收藏
- 关注
原创 lua学习记录
注释 单行 -- 多行 --[[ ... ]]变量 动态类型 类似于python 变量自身没有类型 类型包含在值中 a=1 print(type(a)) 变量名类似于c 以字母数字下划线组成 不能以数字开头 大小写敏感 以下划线开头的变量名或许有特殊作用 如_VERSION 官方不推荐用户定义的变量以下划线开头 单纯的一个下划线 _ 的变量名常用作dummy variable基本类型 nil, boolean, nu...
2020-08-29 08:55:52
168
原创 2018多校补题2
第四题:一个脑筋急转弯,如果能赢就直接赢,不能赢就取一把不能赢的情况转给对面,所以必胜,一直输出yes就行了第十题:由于交换两个元素只能减少一个逆序数,所以肯定每个逆序数都取x,y中小的那个,所以只用求出有多少逆序数就行了由于数据的范围是1e-9~1e9,所以要离散化。当时一个long long 写成int了然后wa出了屎#include <bits/stdc++.h>...
2018-07-26 08:48:01
339
原创 2018多校1补题
第一道当时没做出来,后来看题解补了n=x+y+z,x|n,y|n,z|n --> n/x,n/y,n/z都是整数,令其为abc -->1/a+1/b+1/c=1,abc为整数解这个方程发现abc只有2,4,4和3,3,3和2,3,6这三个值,由于2,3,6情况里面有6,满足这个的肯定满足3,3,3,而且肯定值小于3,3,3所以舍弃#include<bits/s...
2018-07-25 10:52:28
463
原创 塔杨板子
#include <bits/stdc++.h>using namespace std;const int maxn=10010;vector<int>gra[maxn];int dfn[maxn],low[maxn],ind,v,e;bool instack[maxn];stack<int>s;void init()//点从1开始{ ...
2018-05-09 21:22:46
293
1
原创 校练习赛
题目a:"Miss Kobayashi's Dragon Maid" is a Japanese manga series written and illustrated by Coolkyoushinja. An anime television series produced by Kyoto Animation aired in Japan between January and April...
2018-04-30 21:37:59
341
原创 树状数组学习记录
树状数组这个玩意用来解决 区间合查询+单点修改 的问题他思路里面精髓之处在于二进制的巧妙使用大概一个感觉就是,前缀加二进制魔改arr[]表示原数组,c[]表示存前后缀的数组,n表示arr元素个数对于只要查询区间合不要修改的问题,拿前缀和可以解决,此时我们会构造一个数组c[],其中c[i]=arr[1]+...+arr[i]树状数组用到了这部分的思想,不过此处c[i]并不是从首项开始的连续和,而是将...
2018-04-28 09:45:18
121
原创 多边形面积
计算多边形面积的一个方法:设有n个顶点,按照顺/逆时针排列(此处为了保证向量有序),为x1y1,x2y2,...,xnyn任取一个点o(位置任意,在多边形内外都行)将这个点到每个顶点xiyi的向量记做li则这个多边形的面积就是(l1Xl2+l2Xl3+...+lnXl1)/2 //X代表叉乘(liXli+1)/2表示o,xiyi,xi+1yi+1这三个点构成的三角形的面积,这个式子的意思...
2018-03-26 16:03:25
281
原创 卡特兰数学习记录
卡特兰数,是组合数学中第一个初高中没教过的知识点。因为格式比较固定,不太能直接拿他搞什么幺蛾子,一般用来出水题或者作为其他题的一部分。C(2n,n)/(n+1)是公式,遇到了直接丢上去就行了。比如在这样的情况下就可以直接使用: 2n个人排队买票,每个人手头只有一张钱。其中n个人手上拿着5块,n个人拿着10块。一张票5块,售票厅手头没钱。问这2n个人有多少种让售票厅能够没问题的找钱的排队...
2018-03-16 11:52:48
469
原创 hdu 4857 逃生 (拓扑排序+反向建表+优先队列)
这道题的题意比较迷,他要求在给定的偏序关系外,按 尽可能把最小的元素最先输出 的顺序,并不是最小字典序,比如,这样的一个关系,最小字典序是43521,但是在这里,首先1的位置定死了,肯定是最后输出的,然后,为了先输出2,要走52这条路,所以结果是52431 。可见,2和3制约了5和4的顺序,5和4的顺序对于2和3来说没有影响如果换掉这两对的顺序,可以看出,此时5,4
2018-01-11 10:45:19
288
原创 hdu 5695 Gym Class (优先队列+拓扑排序)
题意:一群人编号1~n,给他们拓扑排序,已知其中的邻接关系,要求得到的拓扑序中,每个元素包括自己以及他前面的编号的最小值最大,求所有人的这个值的和。思路:把正常拓扑排序的队列换成优先队列即可//做的时候手滑把用于记录的变量和循环的变量名写重了结果t了一个晚上//发现用for初始化比用memset初始化速度快,而且更省内存#include using namespace std;
2018-01-08 21:09:59
221
原创 hdu 2647 Reward 拓扑排序判环及层次+反向建图
题意:老板发工资,但是他的公司里面有严重的鄙视链,如果一个人鄙视另一个人,那么他的工资就得比他鄙视的人高。另外,工资起价是888,问要满足这个鄙视链,这次发工资最少得发多少钱,如果鄙视链成环了,输出-1分析:首先对于成环的问题就按照常规的拓扑排序判断有向环的操作来搞,不赘述。然后这个判断层次,这两天脑子一糊把题看错了,把关系搞反了,wa到怀疑人生。思路大概这样:拿一个变量cur记录当前层次
2018-01-08 19:23:44
243
原创 hdu 拓扑排序归纳
拓扑排序,其本质是输出一个全序关系,对于按要求输出给定关系的题目,一般就是按照题目要求实现这个全序关系,这种题时常会先给一个偏序关系,然后给出剩下的元素如何建立关系(字典序之类的)。如果忘了那几个词是啥意思... 偏序关系:满足自反,反对称,传递性的关系 全序关系:一个偏序关系R,且对任意x,y有xRy或yRx 哈斯图:对一个偏序关系画的图,每个点
2018-01-08 19:03:41
1358
原创 hdu1811 Rank of Tetris (并查集+拓扑排序)
题意:有n个人,以0~n-1编号。现在给出m个形如a>b,a=b,ab,b>c,c>a或者a=b,a>c,c>b这样的情况,信息不完全指无法按照当前给定结果判断出唯一顺序(没有加等号的并不会按照编号大小决定顺序)比如有a,b,c三个人,但是给的顺序只有a>b,a>c,这样就无法确定b,c谁先谁后。对于同时出现矛盾和信息不完全,输出矛盾。思路:这题的思路是并查集加拓扑排序,并查集起到一个预处理掉
2018-01-05 21:20:10
254
原创 汇编学习笔记
通用寄存器:AX,BX,CX,DX,为16位寄存器,都可分为两个八位寄存器(A,B,C,D)H,(A,B,C,D)L汇编指令格式:[指令][目的地][出发地] 如:mov ax,18mov:给寄存器赋值add:将寄存器内值加上一个值,如果溢出了就会把多的直接舍弃,注意操作如AL时是把AL当成单独的寄存器使用的,溢出部分会直接舍弃而不是放到AH里面。sub与add类似,另外,如果减出了负值,就会按照...
2018-01-02 11:19:58
322
原创 网络流的基本概念
网络N: (V,X,Y,A,c),其中,V:点集,X:源点集,Y:汇点集(多源多汇的情况可以由虚拟源,汇点的方式转换成单源单汇,对于单源单汇,此处可写成x,y),A:弧集,c:容量函数,c(a)表示弧a的容量。(可行)流f:,f(a)表示弧a的流量,f+(v)表示v的所有出弧的流量和,f-(v)表示v的所有入弧的流量和,f满足容量约束:f(a)流量守恒:对不为x,y的点,f-(v)=f+(
2018-01-02 09:50:27
476
原创 二分图匹配与匈牙利算法
匹配,指一个边集,且其中所有边没有公共顶点。匈牙利算法能求出二分图上的最大匹配。之前看大部分讲解里面都说到了增广路,不过有一篇博客在没有说增广路的情况下讲清楚了匈牙利算法大概是个这样的思路: 假设顶点集是a,b,每次从a上面选择一个元素ai,往b上面找匹配。如果直接找到了一个和ai有边且没匹配过的bj,那么ai,bj匹配,开始ai+1的操作 如果在找匹配的时候,手头上
2017-12-27 15:48:50
233
原创 hdu 1081 To The Max
题意:给一个矩阵,元素有正有负,求最小子矩阵和思路:优化暴力 暴力一个维度,剩下一个一维的就当最大连续和来做#include using namespace std;int main(){ int a[130][130]; int n,cur; while(cin>>n) { for(int i=1;i<=n;
2017-12-26 21:32:11
209
原创 图论学习记录
最小生成树 -prim o(|e|+|v|^2) 上树法,开始时随便选一个点,每次往已有树上面加离树最近的点以及这条边。 -kruskal o(|e|log|e|) 加边法,每次选择不会产生圈的最短的边。单源最短路 最短路问题的统一手段是松弛,每种方法的区别主要在松弛顺序 -Be
2017-12-26 19:05:23
253
原创 dinic算法
dinic算法是一种求最大流的算法。这个算法用到了“层次网络”的概念定义“顶点的层次”lev(v):,表示原点到这个点的最少边数有多少(也可以相反的定义为他到汇点的最少边数有多少,在这里没有本质区别,实现的时候改下判定条件就行)层次网络就是把所有顶点都标上层次的网络了那么这个玩意有什么用呢,他可以使搜索的效率提高dinic的思路仍然是 找路->增广 的想法,少找些路
2017-12-26 09:16:24
965
原创 图的存储方式
图是点和点之间的关系,存储图,主要问题就在怎么存边。为了区别每个点,理论上要把每个点标号,但因为顺序无所谓,一般就直接按照读入的顺序,一个一个往后面排。于是,对于需要存关于点的性质时,只需要开个数组,单独存进去就行了。单独存点这事就很方便。并查集法如果能确定这个图是个树,或者在需要判断这个图有没有树的性质(是否联通,是否有环),可以按根并查集差不多的方法来存点之间的关系
2017-12-25 14:41:08
2477
2
原创 hdu3790最短路径问题
题意:求一个无向图的单源最短路,其中每个边有两个权重,第一个权重值相等时路径的大小由第二个权重决定直接套spfa板子#include using namespace std;int v,e,s,t;const int maxv=1005;struct w{ int d,p; bool operator <(const w b) const {
2017-12-22 11:02:18
275
原创 edmonds-karp算法求最大流
ek算法能在o(v*e^2)时间里求出最大流思路:每一步对残量网络进行一次s到t的bfs,以这次bfs的结果作为增广路,更新残量网络。用bfs找增广路可以避免回头的情况。
2017-12-20 21:11:30
1234
原创 floyd算法-求图中任意两点间最短路
floyd算法是一种可以在o(v^3)求出一个图中任意两点最短路的算法输入:邻接矩阵d输出:直接在d上面修改,每个元素d(i,j)代表点i到点j的最短路这个算法的代码非常短,一眼看上去非常暴力for(int k=1;k<=v;k++) for(int i=1;i<=v;i++) for(int j=1;j<=v;j++)
2017-12-19 10:35:18
2385
原创 spfa
spfa是一个求解最短路的算法思路:按类似bfs的顺序进行松弛 定义一个队列q,以及一个数组vis[]记录每个节点是否在q中 每次有点出入队时修改vis[],确保能判断每个点是否在q中 先将起点s入队 然后开始循环操作,队空为停止条件 q出队一个点,记做v,将v的所有邻点松弛,对于可以松弛的点,若它不在q中就将其入队。判断负权回路:
2017-12-18 11:24:47
750
原创 单源最短路与bellmanford
单源最短路问题,就是对一个边带权图G和其上一点s,求G上每一点到s的权最小路性质: 1.最短路上不会有环 2.将达不到或者暂时达不到的点的距离习惯记做无穷 3.该问题满足最优子结构,即最短路的子图也为最短路如何记录:对每个节点v,维护一个值v.pi,表示这个点的前驱节点。求解完成之后使用他构造最短路径树即可、基
2017-12-16 12:05:35
205
原创 kruskal算法求最小生成树
kruskal算法是一种使用贪心思路求解无向图的最小生成树的算法。其大体思路为:将边按权重排序,然后每次选出权最小且不使图产生环的边,作为树的边挂上树。具体来讲就是这么两个步骤: 1.把边按权重排序。 2.依照1的顺序遍历边: 使用一个并查集来判断加进这条边后图中是否有环。
2017-12-15 20:55:10
1284
原创 hdu1863 (最小生成树)
实现了一个prim,然后胡乱套到题里面对于不联通的情况,胡乱判断一下居然ac了#include using namespace std;const int maxn=10000;int main(){ int dist[maxn]; bool ontree[maxn]; vector >g[maxn];//输入 int n,vt;
2017-12-09 10:52:50
182
原创 pangu and stones(区间dp)
题意:有N堆石子,每次能够合并连续的、大于等于L、小于等于R堆石子,代价是这些石子的个数和。问合并成一堆石子的代价最小值。使用一个dp[l][r][k]记录将区间[l,r]的石子合并为k堆需要的最小代价。用一个d[i]记录第k堆石子有几个石子转移方程:dp(l,r,k)=min{dp(l,i,1)+dp(i+1,r,k-1)},li dp(l,r,1)=m
2017-12-09 10:04:13
475
原创 poj3468 A Simple Problem with Integers (线段树段修改)
题意:线段树段修改的板子题思路:套板子,注意mark _down和值都要用longlong #include #include typedef long long ll; using namespace std; const int maxn=100000*5+100; struct segn {
2017-11-16 14:34:47
140
原创 hdu1698 Just a Hook (线段树)
题意:给一个大小为n的数组,初始状态全为1 ,进行q次段赋值,问最后的全段和是多少思路:线段树段修改模板题(用来写模板的题)特别的是,由于只有最后一步查询全段和以及初始状态全为1,代码可以偷工减料 #include #include using namespace std; const int maxn=500100; //用于存放线段树的结构 l,r表示此区间
2017-11-14 20:35:31
193
原创 hdu2759 Billbord(线段树)
题意:给一个长w宽h的板子,每次往上面贴一个长wi宽1的条子(不可旋转),共n个,每次贴的时候都贴在能贴的最上行的最左端,若贴不下就不贴 给出w,h,wi,n求每个帖子在第几行,若贴不下,输出-1思路:使用最大值线段树记录每行剩余长度,树叶表示那一行的剩余长度。在每次贴的时候,若wi>根值,则树上所有叶子都比这个帖子小,故挂不下,输出-1。 若h
2017-11-13 21:29:57
265
原创 hdu1394 Minimum Inversion Number (线段树
题意:0到n-1这n个数组成一串数,每次进行一个这样的操作:把这组数的第一个数放到最后面,不断这么操作,直到最后一个数变成第一个。求:每次操作得到的序列的逆序数的最小值注:逆序数:一个序列,对每个数,他比他前面多少个数小的值的和思路:一旦求得最开始的序列的逆序数,那么,他的下一个数的逆序数=他的逆序数+n-2*这个数的值-1 (胡乱分析->得出结论) 第一个数的逆
2017-11-11 10:44:37
146
原创 线段树学习笔记及模板
概括:线段树是一种数据结构,针对需要动态 修改并且获取数据中一段信息(子段和,子段最小值等)的数据来使用大体思路:使用一颗完全二叉树(数组实现)记录数据。树的叶子节点记录每一个数据元素,非叶子节点记录段信息。建树,查询,修改都由二叉树的性质:第i个节点的左右孩子为2*i+1,2*i+2 递归的执行建树思路:从根向下递归找叶子->找到叶子后对叶子赋值->赋值完叶子后回溯赋
2017-10-31 19:59:04
183
原创 对于已排序p[]枚举p的所有子集
思路:使用dfs进行枚举 对于每个枚举节点,他只继续向下搜索比他已经包含的最大元素更大的元素 #include using namespace std;void subset(int *a,int psz,int asz ,int las,int *p){ for(int i=las+1;i<psz;i++) {
2017-10-24 16:20:45
158
原创 堆--学习记录
此处默认二叉大根堆描述:一棵树,完全二叉(i的左孩子为2i,右为2i+1),对于每个节点,它的孩子键值小于它,优先队列就是用堆实现的 性质:1.树根为最大点(堆顶),故不断重复 取顶→删顶就能得到排序序列(堆排序) 2.此结构决定了不能在里面找任意元素(数组实现不服)或者迭代,(所以stl的优先队列不能用这俩操作)“最后一个节点”:最下层最右边那
2017-10-05 12:03:59
175
原创 hdu1272&&1325--并查集判环及森林问题
题意:给一个图,如果图里有环或者是森林就输出"No"注意空图算"Yes"并查集判环:合并集合时,如果出现自己并自己的情况,就说明出现了环#include using namespace std;const int maxn=1e6+10;int parent[maxn],ranc[maxn];int serc(int pos){ while(parent[pos]!=
2017-10-04 13:51:43
170
原创 hdu1213--并查集入门题
题意:求一共有多少不相交的集合 #include using namespace std;const int maxn=1e6;int parent[maxn],ranc[maxn];int serc(int pos){ while(parent[pos]!=pos) { pos=parent[pos]; } return pos;}
2017-10-04 11:05:23
164
原创 并查集--学习记录
并查集: 作用于:一个不相交集 效果:在近于常数的时间内完成:1.确定一个元素所在的集合,2.合并两集合。 思路:在每个集合中,令一个元素表示这个集合,称这个元素为:代表元 。使用一颗树代表一个集合,故代表元为这颗树的根。 节点上有双亲指针,代表元的双亲指针指向自己。
2017-10-04 10:01:15
192
空空如也
树莓派4B 摄像头不能正常使用
2020-01-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人