wtpavssite

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2026春季下学期第六周

周一

前缀异或和:

类似前缀和的定义,前缀异或和s[i]就是从第一个到第i个的异或的和,根据异或的性质我们可以得知一段区间l,r的异或和就是s[r]-s[l-1]。性质的主要内容是a^a=0。

保留小数的输出

C中可以使用print中的%.f来控制,C++中使用cout<<fixed<<setprecision()来控制,括号中输入数字控制小数点后几位,前面的fixed意思是定点输出不适用科学计数法

周二

FLoyd算法和Dijkstra算法的区别:

Floyd算法的时间复杂度是O(n^3),而后者配合优先队列的复杂度是m(logn)。前者适合解决多源最短路的问题,后者适合解决单源最短路。对于双关键字的处理后者更优,因为Dijkstra具有松弛性

周三

Floyd算法的bitset优化

首先bitset是一个内部只有01的容器,在初始化的时候必须指定确定的大小,不能动态调整大小。bitset每个占的大小是1bit,相比bool类型的8bit小了很多。
由于bitset适合位运算所以Floyd优化在此基础上就可以达到O(n^2)的时间复杂度
首先使用二维的bitset数组记录每个节点能到达的节点为1。然后枚举每个中间节点i,对于每个能到达i节点的j节点,我们只需要把j节点能到达的bitset数组设置成为bs[j]|=bs[i]。就可以把i节点能到达的所有节点贡献给j节点。

排序相关

sort和pair:
sort默认是从小到大进行排序,在sort的类型是pair的时候会按照字典序的顺序排也就是先比较first,然后如果相同再比较second
优先队列
优先队列默认排序是从大到小来排序。如果这个时候和pair一起使用那么就是pair里面按照字典序从大到小排序

周五:

初探换根dp:

换根dp依赖于两次dfs,第一次更新每个节点作为根节点时子树的大小和某个具体的节点的深度(一般是1)。第二次dfs用第一次得到的数据对每个节点作为根节点的时候的深度。

周六:

带权并查集:

带权并查集是在路径压缩父节点的同时,维护节点和根节点的关系。

C语言字符串和string的差别:

C语言字符串是一串地址,string是一个复杂的类。两者尽量不要混用,比如说strncpy是C语言的函数,用在string上面会报错。

string的函数:

1.st.replace,传入三个参数第一个代表更换的位置,第二个代表更换的大小,第三个表示用来更换的字符串
2.st.insert,传入两个参数,在第一个参数的位置插入第二个参数传入的字符串
3.st.find,传入一个字符串,返回的类型是无符号整型(这点和之前的size是一样的)如果没有找到会返回string::npos,所以在查找是否找到的时候不能写-1而是string::nops

posted on 2026-04-06 20:50  wt_pav  阅读(6)  评论(0)    收藏  举报