随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:dfs 时隔n年练习string 的自带函数,完全不记得substr了.... 思路: 首先注意重叠部分的长度使用是任意的.预处理出每个字符串之间重叠的最短长度.然后dfs相连即可. 判定前后缀是否相等用substr较为方便.主要有两种用法 Go 因为重合部分不能超过原字符串长,所以
阅读全文
摘要:原题链接 考察:bfs 思路: 行走方式不同的迷宫问题,最坑的是输入的先是列数再是行数. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std;
阅读全文
摘要:原题链接 考察:bfs 错误思路: 定义结构体Node,用Node里vector记录路径. 此思路会TLE,当n很大时,每次赋值都要消耗一定时间. 正确思路: 用数组记录路径,即用PII 数组记录到达该点的上一步的坐标.到时候再迭代即可. 注意:当迭代的时候,不要重新定义PII it!!!!! 最最
阅读全文
摘要:原题链接 考察:Flood Fill + hash 思路: 首先连通点很容易找到,关键是判定星群是否相似.对计算机来说很难保存每个连通块形状再旋转比较.这里可以考虑hash映射.这里的经验值是计算连通块两两之间的距离,累加和,作为关键字.这里要用sqrt,不能直接用平方和.平方和更容易发生冲突,比如
阅读全文
摘要:原题链接 考察:Flood Fill(dfs or bfs) 思路: 用Flood Fill算法时,判定边界是否有> < 的高度. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std
阅读全文
摘要:原题链接 考察:Flood Fill(dfs or bfs) 错误思路: 根据每个数字建立一张char类型的新图. 这种做法超麻烦!!!注意这道题1 2 4 8的数字不是偶然的,这正好对应每位二进制的1. 这道题用如果用方向数组要根据下标来判断该位是否为1才能继续前进. 1 #include <io
阅读全文
摘要:原题链接 考察:差分 思路: 首先认识到差分数组的下标是1~n+1.因为要求序列值全部相同,不同种序列的值取决于b[1]的值.某段区间内全部+1,相当于差分数组b[l]+1,b[r]-1.要让次数最少,让所有操作尽可能有效,即让b数组2~n的正数-1,负数+1.操作次数是max(正数和,负数和).第
阅读全文
摘要:原题链接 考察:二分 再做一次还是没想到系列 蒟蒻本蒻 思路: 这道题的check函数很好想,就是枚举端点,找到区间>=l&&平均值>=mid的区间.暴力枚举是sum[j]-sum[i]>=(j-i)*mid.我们需要进行优化,要将二重循环优化到一维,i必须省去,我们求[i,j]区间是否平均值>=m
阅读全文
摘要:原题链接 考察:二分 思路: 嵌套二分,和上一题Matrix差不多,中位数和排序后的a数组都具有单调性. 更好的check函数是,score是a[j]与a[i]的差值,已经确定a[j],那么可以求出a[i]的位置(lower_bound),从而计算前面有多少个符合条件的. 为什么本题不会有不存在的情
阅读全文
摘要:原题链接 考察:二分 第一次做这题我还以为是dfs..... 思路: 首先烘干时间符合单调性,二分烘干时间,难点在如何写判断函数.首先两种情况: a[i]<=s,直接无视. a[i]>s,需要考虑它用烘干机的时间,注意不能直接算把它烘干完的时间,因为浪费的时间没有利用,假设它用烘干机的时间是t,那么
阅读全文
摘要:原题链接 考察:二分 思路: 首先这道题不是让我们求坐标,而是求具体的值.观察式子,当j不变时,i增大,值增大.分数满足单调性,j不变时,i也满足单调性.二分分数,枚举每一列有多少个满足分数<小于当前score,根据总数再继续二分score.在枚举每一列时,i也满足单调性,所以也用二分枚举i. 注意
阅读全文
摘要:原题链接 考察:组合数学 思路: C[i][j] = C[i-1][j-1]+C[i-1][j],注意拿当前数+不拿当前数,和分苹果的划分方式不一样.当C[i][j] = 0,Sum[i][j] = 1,求前缀和i、j范围必须相同. 1 #include <iostream> 2 #include
阅读全文
摘要:原题链接 考察:枚举 + hash 思路: 暴力是直接枚举a[i]与a[j],需要优化省去一重循环.我们枚举的a[i],a[j]检查是否为k倍数时,需要让a[j]*10t + a[i](t位为a[i]的位数,注意这里用字符串转换反而不如直接求位数方便).一重循环枚举a[i]时,t已知,a[i]已知,
阅读全文
摘要:原题链接 考察:思维 思路: 考虑四个端点的规律,而不是斜率相同的点的规律.除了第三象限其他端点的值与x、y都很好找.第三象限要进行x+1>=<y分类.代码写繁琐了,y总的思路将点分为在上、下、左、右更好. 1 #include <iostream> 2 #include <cstring> 3 #
阅读全文
摘要:原题链接 考察:线段树 or 树状数组 思路: 套模板即可. 注意:build函数里,赋值不是赋值a[u],而是a[l].l、r是1~n范围内.u是线段树结点编号. 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4
阅读全文
摘要:原题链接 考察:树状数组 +贪心 or归并排序+贪心 思路: 首先一个定理:冒泡排序的交换次数 = 逆序对个数.证明: 冒泡排序每次交换减少一个逆序对,当最后逆序对数量 = 0,交换次数>=k. 又因为每次只能减少一个.那么必然可以取到k.对于某一个人i而言,i前面>hi有k个,后面<hi有t个.k
阅读全文
摘要:原题链接 考察:树状数组 思路: 数据中x,y按升序的方式给出,当前xi yi 对于在它前面的星星,y一定<=yi,x不定,对于它后面的星星,要么y>=yi要么x>=xi,可以发现后面的星星一定不在计算的范围内.于是我们可以边读数边计算1~xi的前缀和. 注意:x可以从0开始,add函数不允许下标是
阅读全文

浙公网安备 33010602011771号