草庐IT

四边形不等式学习笔记

简要题意四边形不等式是一种dp优化策略。多用于2DDP。内容对于区间\([l,r]\)带来的贡献\(w(l,r)\),如果其满足:对于\(L\leql\leqr\leqR\),\(w(L,r)+w(l,R)\leqw(L,R)+w(l,r)\)则称\(w\)满足四边形不等式。特别地,如果上式符号取等,则称其满足四边形恒等式。注:上面的不等式可以记成:交叉小于包含。四边形不等式优化基础:对于一个dp\(f(i,j)\),如果其最优决策点(即第三维枚举的最优位置)\(s(i,j)\)满足\({s(i,j-1)\leqs(i,j)\leqs(i+1,j)}\),则可以用此方法将时间复杂度优化到\(O

「学习笔记」BSGS

「学习笔记」BSGS点击查看目录目录「学习笔记」BSGSBaby-stepGiant-step问题算法例题DiscreteLogging代码P3306[SDOI2013]随机数生成器思路P2485[SDOI2011]计算器思路Matrix思路代码Baby-stepGiant-step问题在\(O(\sqrt{p})\)的时间内求解\[a^x\equivb\pmodp\]其中\(a\perpp\),方程的解\(x\)满足\(0\lex。算法首先根据费马小定理\(a^{p-1}\equiv1\pmod{p}\),不难发现\(1\simp-1\)是一个循环节,也就是说只用判断\(1\simp-1\)

「学习笔记」BSGS

「学习笔记」BSGS点击查看目录目录「学习笔记」BSGSBaby-stepGiant-step问题算法例题DiscreteLogging代码P3306[SDOI2013]随机数生成器思路P2485[SDOI2011]计算器思路Matrix思路代码Baby-stepGiant-step问题在\(O(\sqrt{p})\)的时间内求解\[a^x\equivb\pmodp\]其中\(a\perpp\),方程的解\(x\)满足\(0\lex。算法首先根据费马小定理\(a^{p-1}\equiv1\pmod{p}\),不难发现\(1\simp-1\)是一个循环节,也就是说只用判断\(1\simp-1\)

直线光栅化-Bresenham算法

直线光栅化-Bresenham算法Bresenham算法设两个顶点为\(P_{1}(x_{1},y_{1})\)和\(P_{2}(x_{2},y_{2})\),且满足\(\Deltax=x_{2}-x_{1}>0\)且\(\Deltay=y_{2}-y_{1}>0\),则两点确定的直线方程的斜率为\(k=\frac{\Deltay}{\Deltax}\)。当\(0时,从\(x\)轴开始取样,算法的决策参数递推方程为:\[p_{1}=2\Deltay-\Deltax\]\[p_{k+1}=\left\{\begin{matrix}p_{k}+2\Deltay-2\Deltax,p_{k}\ge0

直线光栅化-Bresenham算法

直线光栅化-Bresenham算法Bresenham算法设两个顶点为\(P_{1}(x_{1},y_{1})\)和\(P_{2}(x_{2},y_{2})\),且满足\(\Deltax=x_{2}-x_{1}>0\)且\(\Deltay=y_{2}-y_{1}>0\),则两点确定的直线方程的斜率为\(k=\frac{\Deltay}{\Deltax}\)。当\(0时,从\(x\)轴开始取样,算法的决策参数递推方程为:\[p_{1}=2\Deltay-\Deltax\]\[p_{k+1}=\left\{\begin{matrix}p_{k}+2\Deltay-2\Deltax,p_{k}\ge0

<五>理解inline内联函数

如下代码usingnamespacestd;intsum(inta,intb){ returna+b; }intmain(){ inta=1;intb=2;intret=sum(a,b);return0;}上面sum函数调用,会涉及到参数压栈,函数栈帧的开辟及回退过程,因此在函数调用的过程时候是会有开销的sum函数的核心功能转成汇编指令即1:将x的值放入寄存器2:再将y的值和寄存器内容相加为了使用这个非常简单的功能,我们需要做许多额外的动作,例如压函数参数入栈,压下一条执行指令地址入栈,将main函数的栈底指针压栈,为sum函数开辟栈帧,这一些系列动作产生的汇编指令远远多于x+y产生的指令,这

<五>理解inline内联函数

如下代码usingnamespacestd;intsum(inta,intb){ returna+b; }intmain(){ inta=1;intb=2;intret=sum(a,b);return0;}上面sum函数调用,会涉及到参数压栈,函数栈帧的开辟及回退过程,因此在函数调用的过程时候是会有开销的sum函数的核心功能转成汇编指令即1:将x的值放入寄存器2:再将y的值和寄存器内容相加为了使用这个非常简单的功能,我们需要做许多额外的动作,例如压函数参数入栈,压下一条执行指令地址入栈,将main函数的栈底指针压栈,为sum函数开辟栈帧,这一些系列动作产生的汇编指令远远多于x+y产生的指令,这

C++ inline

1.inline可以免除函数调用时的保存上下文时的一些开销,其本质就是对此函数的每一个调用都以函数本体替换之。 inline的坏处:若在一台内存有限的机器上,过度热衷inlining会造成程序体积太大,即使拥有虚拟内存,inline造成的代码膨胀也会导致额外的换页行为,降低指令高速缓存装置的集中率,以及伴随这些而来的效率。但是好处是,如果inline函数的本体很小,编译器针对函数本体所产出的码可能比函数调用所需要的开销等所产出的码更小。那么inlining函数可以导致较小的目标码和较高的指令告诉缓存装置击中率。 inline只是对编译器的一个申请,不是强制命令。这项申请可以隐喻提出,也可以明确

C++ inline

1.inline可以免除函数调用时的保存上下文时的一些开销,其本质就是对此函数的每一个调用都以函数本体替换之。 inline的坏处:若在一台内存有限的机器上,过度热衷inlining会造成程序体积太大,即使拥有虚拟内存,inline造成的代码膨胀也会导致额外的换页行为,降低指令高速缓存装置的集中率,以及伴随这些而来的效率。但是好处是,如果inline函数的本体很小,编译器针对函数本体所产出的码可能比函数调用所需要的开销等所产出的码更小。那么inlining函数可以导致较小的目标码和较高的指令告诉缓存装置击中率。 inline只是对编译器的一个申请,不是强制命令。这项申请可以隐喻提出,也可以明确

P1002 [NOIP2002 普及组] 过河卒 题解

题目:[NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,\(A\)点\((0,0)\)、\(B\)点\((n,m)\),同样马的位置坐标是需要给出的。现在要求你计算出卒从\(A\)点能够到达\(B\)点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。输入格式一行四个正整数,分别表示\(B\)点坐标和马的坐标。输出格式一个整数,表示所有的路径条数。样例#1样例输入#