logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

Dis(信息学奥赛一本通- P1556)

本文探讨了树结构中求解两点间最短路径距离的高效算法。通过将问题转化为最近公共祖先(LCA)的求解,提出了两种优化方案: 倍增法:利用二进制拆分思想预处理每个节点向上2^j步的祖先,查询时通过log(n)次跳跃找到LCA。时间复杂度O((n+m)logn),空间O(nlogn)。 RMQ(欧拉序+ST表):将树转为欧拉序列后,用ST表在O(1)时间内查询深度最小值对应节点作为LCA。预处理O(nlo

#算法#数据结构
【C++避坑】为什么 std::string 不能直接用 scanf?别再踩这个雷了!

scanf适合读基础类型(int, char, double)或者原生char数组。string是复杂对象,必须用cin。如果担心效率,关掉同步)即可。

#c++
【例 1】点的距离(信息学奥赛一本通- P1552)

本文介绍了两种高效算法求解树结构下任意两点间距离问题:倍增法和欧拉序+RMQ法。倍增法通过预处理每个节点向上跳跃2^k步的祖先信息,将查询时间复杂度优化至O(logN);欧拉序+RMQ法则将树结构转换为线性序列,利用ST表实现O(1)查询。两种方法均采用LCA(最近公共祖先)的核心思路,通过公式distance(x,y)=depth[x]+depth[y]-2*depth[LCA(x,y)]计算距

#算法#数据结构
【例 2】最敏捷的机器人(信息学奥赛一本通- P1542)

文章摘要: 题目要求处理一个长度为n的整数序列,对每个连续的k个元素窗口计算最大值和最小值。针对静态区间最值查询(RMQ)问题,提出了两种高效解法: ST表(倍增法):通过O(nlogn)预处理,实现O(1)查询。利用二维数组存储区间最值下标,通过分治思想覆盖任意区间。 线段树(分治法):O(n)建树后,每次查询耗时O(logn)。每个节点维护区间最值,递归合并子节点结果。 关键点: ST表:避免

#算法#数据结构
C++14 string基本用法 string复习参考

在竞赛中,string的优势在于极其方便的拼接、比较和 STL 联动;但它的劣势在于底层涉及动态内存分配,一旦用错极容易造成或。

#c++#算法
【例题2】The XOR Largest Pair(信息学奥赛一本通- P1472)

pow函数的精度刺客:使用<cmath>里的pow(2,k)计算 2 的次幂,返回的是浮点数。在位数较高时,极易因浮点精度丢失导致最终转成int时少 1。必须使用位运算1<<k来代替。字典树通道有效性判定:判断一个节点是否存在,是看它的nxt是否被分配过有效编号,即nxt[v]!=0,不能写成nxt[v]==1(这会导致只认第一个分配的节点,丢弃后续所有路径)。0 的边界死角:如果采用除 2 取余

#算法
【例题2】The XOR Largest Pair(信息学奥赛一本通- P1472)

pow函数的精度刺客:使用<cmath>里的pow(2,k)计算 2 的次幂,返回的是浮点数。在位数较高时,极易因浮点精度丢失导致最终转成int时少 1。必须使用位运算1<<k来代替。字典树通道有效性判定:判断一个节点是否存在,是看它的nxt是否被分配过有效编号,即nxt[v]!=0,不能写成nxt[v]==1(这会导致只认第一个分配的节点,丢弃后续所有路径)。0 的边界死角:如果采用除 2 取余

#算法
Radio Transmission(信息学奥赛一本通- P1467)Radio Transmission 无线传输(洛谷-P4391)

哈希暴力法的枚举上限:由于允许循环节残缺,原串长度可能不足两个完整循环节(如abcdabc周期为4),因此枚举上限必须是len,绝不能写成len/2。KMP的0-base越界:获取全串最长前后缀必须是nxt[len-1]。在0-base中,写成nxt[len]会直接读取未知内存导致RE或WA。大数据量的I/O阻塞:本题字符串长度高达 10^6,如果不加cin.tie(0);,容易在读取长字符串时超

#算法#KMP
【例题2】Power Strings(信息学奥赛一本通- P1466)

多组数据切忌滥用memset: 本题是多组测试数据,且最大长度达10^6。在KMP代码中,如果每读入一个字符串就,会引发海量的无用内存擦除,容易导致超时。因为pre()函数内部的for循环是严格基于索引逐个赋值的,会自动覆盖旧数据,因此无需清空。哈希匹配的内层break: 哈希校验时,一旦发现当前分块sum和基准块ans2不等,必须立刻将flag2置0并break出内层循环。若缺少此break,在

#算法#KMP
【例题1】剪花布条(信息学奥赛一本通- P1465)

多组数据读入的阻塞陷阱题目规定以单个结束。很多同学习惯写。当最后一行只有一个时,s1会读入,而程序会阻塞等待s2的输入,虽然信息学奥赛一本题可以通过,但容易导致评测机卡死报超时。先读取s1探路,判断若为则立刻break,确认安全后再读取s2。KMP的Next 数组赋值位置在求next数组时,nxt[i]记录的是以索引i结尾的子串的最长公共前后缀长度。必须写成nxt[i]=j,切忌笔误写成nxt[j

#算法#KMP
    共 16 条
  • 1
  • 2
  • 请选择