树状数组和线段树 lowbit函数lowbit函数指的是将元素与元素的补码按位与,即a&-a,这个值返回的是从右数第一个1开始的值 例如 6&-6, 6二进制位为110,所以6的lowbit函数值为10,即十进制下的二 ll lowbit(ll num) { return num&-num; } 树状数组首先我们可以把一整个数组分为若干小部分,然后让这几个小部分叠 2020-01-18 算法
程序的进入与退出 程序进入在c++中,程序的入口是main函数,并且main函数有两个参数 int main(int argc,char* argv[]) argc是用来记录输入的参数的数量,而argv是用来记录输入的参数。 例如: ls -la,这个输入中有两个参数,第一个参数是ls,第二个参数是-la 程序退出return 是退出当前函数,例如退出主函数或者退出任意函数 而 exit 是退出当前进程,也就是说就 2020-03-02 基础 > c++
深度优先搜索和广度优先搜索 深度优先搜索基本思想:它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念 例 V0->V1->V4->V3->V5->V6,先从v0到V1,再从V1到V4,发现到了终点,就退回到V1继续寻找 代码 注意恢复初始状态十分重要,在一种情况走不了的情况下它可以使 2020-01-14 算法
程序执行过程的跟踪 运用debug +程序名进入debug过程 例如 debug 1.exe 程序开始都是从0000的偏移地址开始的,设段地址为A,而程序开始有一段不做该程序内容,而有其他用途。这段程序占256个字节,叫psp,之后段地址偏移10h,所以真正的程序是从A+10:0 开始的(256个字节在16进制中是10,而A也是用16进制表示的) 2020-01-21 汇编
汇编的第一个程序 伪指令编译器中,包含两种指令,一种是汇编指令,一种是伪指令。伪指令是给编译器看的,最终不会被cpu执行。先了解三个最为基础的伪指令 XXX segment,XXX ends,这两个是配套使用的。功能是定义一个代码段,一个段必须要有一个名称标识(XXX是也) 例如codesg segment ,codesg ends assume 这条指令作用是假设某一寄存器和程序中的某一个用segmen 2020-01-20 汇编
汇编语言数据位置的表达 立即数其实就是idata,这种数据执行前在cpu的指令缓冲器中,在汇编指令中直接给出 寄存器指令要处理的数据在寄存器中,在汇编指令中给出相应寄存器名 段地址(SA)和偏移地址(EA)这些数据在内存中,在汇编指令中可以用[x]的方式给出 指令要处理数据有多长用寄存器的ax或al可以很方便的说明数据长度,但是如果是内存之间的传递可以用x ptr 的方式确定是字型传递还是字节性传递 例: mov wor 2020-01-24 汇编
汇编语言写函数 例,计算data段第一行的三次方,并储存到第二行上1234567891011121314151617181920212223242526assume cs:code,ds:datadata segment dw 1,2,3,4,5,6,7,8 dd 8 dup (0)data endscode segmentstart: mov ax,data mov ds,ax mo 2020-01-28 汇编
汇编中的多层循环 因为唯一的用于统计循环次数的寄存器就是cx,所以有多层循环的时候就会碰到循环次数难以记录的问题,以下是一种解决办法1234567891011s0:mov dx,cx//用另一个寄存器来存cx的次数 mov si,0 mov cx,3 s:mov al,[si+bx] and al,11011111b mov [si+bx],al inc si loop s add bx 2020-01-24 汇编
汇编指令学习(待补充) mov 内存地址1:内存地址2。把地址上的数据从2赋值到1 sub 。。。 数据1-数据2 add 。。。 + inc 寄存器 让寄存器上的数据+1 dw “define word” 定义字型数据 and 逻辑与命令,按位进行与运算 可以通过该命令将相应为变为0,其他位不变 例如: mov al,01100011b and a 2020-01-23 汇编