随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:双指针 错误思路: 贪心,对于当前枚举$a[i]$,要么把它加入到当前和里,要么新开一个和. 错误原因: 只能说当前差值大不代表以后小. 正确思路: 双指针法用于解决有单调性的区间问题.这里找到区间和的绝对值最靠近t的点.因为数列是有+-的,所以前缀和没有单调性,但是这里求的是绝对值
阅读全文
摘要:原题链接 考察:计数dp 思路: 这dp真心还算好想,可本蒟蒻是fw.令$f[i]$为首项为$a[i],长度为a[i]+1的个数$ (1) a[1] = k-1的幸运序列.\(f[i] = C_{n-i}^{a[i]}\) (2) 拼凑的序列,这里不是区间dp,我们考虑一个幸运序列至少可以拆成俩个序
阅读全文
摘要:原题链接 考察:思维 思路: 比较容易想到离散化,然后让L点权值为1,R点权值为-1.这里需要分类讨论: (1) 当前枚举点有左端点,此时再计算上个点到此点的距离,\(ans[当前权值和] = v[now] - v[last]\) (2) 当前枚举到有右端点,此时$ans[当前权值和] = v[no
阅读全文
摘要:原题链接 考察:线段树+最短路 思路: 线段树优化建边的模板题,基本参考了大佬博客,私以为这个是讲得最好的. GO 关于为什么出树是由子到父,因为入树必然是父节点到子节点,而为了搭配入树只能是子节点到父节点. ##Code #include <iostream> #include <cstring>
阅读全文
摘要:原题链接 考察:二分 错误思路: 分治.将第一个数和其他所有数比较完后,确定第一个数的位置.然后递归左右半边. 只过了10个数据,剩下的超过10000次. 思路: vector装已经排好的序列,对于新的枚举数,二分求适合它的位置. ##Code // Forward declaration of c
阅读全文
摘要:原题链接 考察:最短路 思路: 建边是容易想到的...但是本蒟蒻没反应过来怎么求会面点... 建虚点,以1,n为起点求到达每个点的距离,然后每个点距离的最大值的最小值就是答案. ##Code #include <iostream> #include <cstring> #include <queue
阅读全文
摘要:原题链接 考察:分治 经典题了,问题是这种分治本蒟蒻真的想不到() 思路: 思路以及证明看这位大佬的博客,没有比他写的更好的. GO 但是这位大佬的图感觉有点问题,后面枚举y坐标时,日字应该是横着才对. 时间复杂度$O(nlog_2n)$ ##Code #include <iostream> #in
阅读全文
摘要:原题链接 考察:分治 思路: 我是sb,普及题不会().发现只要不是2两端就需要(),由此区别开. ##Code #include <iostream> #include <algorithm> using namespace std; const int N = 20; int logs[N],n
阅读全文
摘要:原题链接 考察:分治 令人呕吐的分治 思路: 直观思路是找到A,B的直角坐标,然后求距离和.这里的分治是递归到最底层,然后根据等级i到等级i+1的坐标变化,算出直角坐标.可以发现将图分为4个模块时,每个等级的变换规则相同. ##Code #include <iostream> #include <c
阅读全文
摘要:原题链接 考察:拓扑排序+并查集 错误思路: 离线处理,$d[i]$记录i的入度.如果$d[i]<=1$就不纳入并查集,否则就加入. 错误原因: 删除一个点,可能使别的点$d[i]<=1$ 思路: 因为$d[i]$是会级联影响的,所以我们用拓扑排序求$d[i]<=1$的点.但是注意题目是无向边,我们
阅读全文
摘要:原题链接 考察:莫比乌斯反演 思路: 参考的大佬的题解.这位老师总结的套路总结的很好:GO 主要为: 优先提取gcd(i,j) 将$gcd(i,j) = d$化为 \(gcd(i/d,j/d) = 1\) \(\sum_{d|gcd(i,j)}^{gcd(i,j)} mob[i] = [gcd(i,
阅读全文
摘要:原题链接 考察:推公式 思路: \(gcd(lcm(a,b),lcm(a,c))==gcd(a,lcm(b,c))\) ##Code #include <iostream> #include <cstring> using namespace std; typedef long long LL; c
阅读全文
摘要:原题链接 考察:思维 思路: 从小区间开始看: len==2,只有区间:k >k各一个,才能成功.只要出现了2个k,那么在len==3的区间内一定能成功.此时递推出yes. len==3,不考虑(k,>k)的区间长度=2的情况,假设区间内存在k,那么此时只有(<k,k,k)或者(k,<k,>k),(
阅读全文
摘要:原题链接 考察:树状数组 错误思路: 按顺序加入线段,对于每个线段左右端点,求min(左端点往上的个数,右端点往下的个数),min(左端点往下的个数,右端点往上的个数) 错误原因: 当数据出现: 1 1 3 3 2 2 就会计算错误. 思路: 排序,按左端点排序,求右端点的逆序对. ##Code #
阅读全文
摘要:原题链接 考察:贪心 错误思路: 对于每个任务,按d,a顺序排序,如果不能按时完成就付钱使得按时完成. 思路: 不一定要压当前任务的时间,我们可以压花费更小的任务时间,使得超时任务按时完成. ##Code #include <iostream> #include <cstring> #include
阅读全文
摘要:原题链接 考察:数位dp+高精 思路: 数位dp太裸了,所以考察的是高精,参考大佬写了压位的高精,以后可以拿出来%. 转移的第三重循环不要从0~M,而是枚举这一位数字是什么. ##Code #include <iostream> #include <cstring> #include <algori
阅读全文
摘要:原题链接 考察:容斥原理 or 莫比乌斯反演 思路: 枚举平方数: \(2^2,3^2,4^2,5^2,6^2,...,1e^{7^2}\) 对于$22$需要减去,$32$需要减去,$42$不需要计入,$62$需要减去...如果忽视指数,这就对应了莫比乌斯函数,我们预处理1e7以内的质数,然后利用$
阅读全文
摘要:原题链接 考察:容斥原理 只有我不会的容斥原理. 错误思路: 正向考虑,然后根本算不出来 思路: 这里主要是抽象成四个条件: 第一行没有人 最后一行没有人. 第一列没有人 最后一列没有人. 我想的是分情况讨论边角的情况,结果是情况太复杂了.这里的容斥主要是抽象出四个条件. 而且处理剩余位置也很妙,每
阅读全文
摘要:原题链接 考察:莫比乌斯反演 思路: 发现gcd(i,j) = 1的损失能量都是1,gcd(i,j) = 2的,损失能量都是3...由此枚举gcd(i,j) = k,求$(n,m)$范围内$gcd(i,j) = k$的对数.时间复杂度大概是$O(n^{3/2})$ ##Code #include <
阅读全文

浙公网安备 33010602011771号