随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:计算几何,枚举 思路: 枚举所有线段排列方案.检查以下条件: 两条线平行,相连两条线垂直. 边的长度都$>0$ 都是直角 判断向量平行和垂直: GO ##Code #include <iostream> #include <cstring> #include <map> #inclu
阅读全文
摘要:原题链接 考察:dfs 错误思路: 有点类似$acwing$的正则问题,然而并不是.... 正确思路: 当遇到一个pair后面一定是<,但是$int$不一定.需要考虑它在pair后的哪个位置.很巧妙的方法是一个pair是< , >三个符号$2$个$dfs$.,是第一个dfs回溯后添加,>是第二个df
阅读全文
摘要:原题链接 考察:贪心 思路: 不知道具体分到哪类....总之是分情况讨论. (1) k>1的情况,分为 m<=n-1 和 mn 两种情况 (2) k1 分为3种情况. \(2.1\quad m<=n-2 和m==n-1 和 m==n\) 其中$mn$又要细分为$n2和n>2$的情况 ##Code #
阅读全文
摘要:原题链接 考察:记忆化搜索 思路: 不用等完整的DIMA在记录.设置$dp[i][j]\(为当前坐标\)(i,j)$能走的步数.求所有起点的最大$dp[i][j]$. 无穷的条件是当前起点开始走到本次走过的地方.所以还需要一个$bool$数组记录. ##Code #include <iostream
阅读全文
摘要:原题链接 考察:贪心+思维 思路: 首先明确抹去字符不能改变$s1$在$s2$的位置.也就是不存在$"你中有我,我中有你"$的情况.所以如果$s2[i]$在$s1[i]$出现位置比$s2[i+1]$晚,那么$ans++$. 两层$for$循环明显需要优化,所以预处理$s1$的情况.$f[i][j]$
阅读全文
摘要:原题链接 考察:线性dp 思路: 一开始完全没想到dp,看了题目的算法标签才做出来() $f[i][j]$记录当前位是$i$,符合要求的子序列上一位是$j$的最长长度. $dp$转移: 找到上一位与$a[i]$相等的位置$k% $k$存在 \(f[i][j] = f[j][k]+1\) $k$不存在
阅读全文
摘要:原题链接 考察:模拟,贪心 思路: 万恶的模拟+离线处理题. 对于相邻的0之间的数字,最大的放在stack里,其次在队列,最后在双端队列. 要注意的是可能末尾没有0 ##Code #include <iostream> #include <cstring> #include <stack> #inc
阅读全文
摘要:原题链接 考察:思维 思路: 假设时间$c$后,以$1$为开始的细菌$>=t$.此后$n-c$就是以$t$为起始到达$z$的时间.但是如果$>t$就需要将$ans+1$ #include <iostream> #include <cstring> using namespace std; typed
阅读全文
摘要:原题链接 考察:st表+贪心 or 枚举+剪枝 ###思路一: 枚举+剪枝.枚举左端点,在枚举$>i$的每一个$j$.求两个值,以$i$为起点的和,与以$i+1$为起点的或和.如果两个值是一样的说明没必要$a[i]$没必要在此区间存在. #include <iostream> #include <c
阅读全文
摘要:原题链接 考察:快速幂 思路: 简单题,但我$wa$了$n$次... $mp$统计$sum-a[i]$的出现次数.从小开始遍历,如果次数可以整除$x$,则需要进位,注意每个地方都最好$long long$.... 还有就是分子可能>分母,因为$a$最小可以 \(= 0\) ##Code #inclu
阅读全文
摘要:原题链接 考察:组合数学 思路: 我们不必模拟每次具体去掉什么.因为去掉的蜡烛只能在熄灭的蜡烛左右俩侧.对于区间$2$,每次在左右端点选一个去掉,方法数是$2^{8-4-1-1}$.但是区间1,3是特殊的,因为只有一种方法. 计算完区间内部的方法后,就是计算区间之间的方法数.这里不能用插空法.是先有
阅读全文
摘要:原题链接 考察:双指针 思路: 两个单调队列,一个存最大值,一个存最小值.当差值$>k$时开始计数.这时需要在设置一个指针$l$,将最左边的队列元素去掉.计算的时候....不要两头计算,确定左边计算右边........... ##Code #include <iostream> #include <
阅读全文
摘要:原题链接 考察:数论(?) 思路: 一开始还以为是背包什么的,结果数字有规律....$1689$的排列可以组成0~6的余数.剩下的数字我们随意拼即可.$0$直接全部放末尾.不存在没有数字的情况. ##Code #include <iostream> #include <cstring> #inclu
阅读全文
摘要:原题链接 考察:枚举 思路: 看懂题目省事一半,所有单元格都是需要净化的,所以最少操作数是$n$,枚举每一行,每一列,看是否覆盖所有单元格. ##Code #include <iostream> #include <cstring> using namespace std; const int N
阅读全文
摘要:原题链接 考察:思维+数论 思路: 如果存在,则所有选中点间距相等边的长度*边的条数 = \(n\).也就是边的长度是$n$的倍数.时间复杂度是$O(\sqrt(n)*n )$ ##Code #include <iostream> #include <cstring> using namespace
阅读全文
摘要:原题链接 考察:bfs 思路: 可以移动的范围不超过$10^5$,所以直接bfs.... ##Code #include <iostream> #include <cstring> #include <algorithm> #include <map> #include <queue> #inclu
阅读全文
摘要:原题链接 考察:思维+计算几何 思路: 预处理所有点的度数,存在一个最小角的包含所有的点,那么必然存在最大的相邻点之间的角度没有包含所有的点. 反三角函数的返回值是弧度,详情看此篇GO ##Code #include <iostream> #include <cstring> #include <c
阅读全文
摘要:原题链接 考察:枚举+二分 思路: 枚举其他两个药品的使用量,二分最后的使用量 ##Code #include <iostream> #include <cstring> #include <cmath> #include <vector> using namespace std; typedef
阅读全文

浙公网安备 33010602011771号