随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:思维 思路: 类似RMQ的思想,对于每个点求往左,往右不减最远能到达处.求是否和会大于区间长度. ##Code #include <iostream> #include <cstring> using namespace std; const int N = 100010; int
阅读全文
摘要:原题链接 考察:构造 思路: 很容易想到先构造$gcd(a,b) = 1$的两个数,最后两个位置构造剩余的$k$.剩余$k$最大到$k-\frac {105}{2}+1$.构造$k,k*2$不会超过$109$,剩下的1到质数里成对构造.最多需要$2*105$个质数,需要开到$107$ ##Code
阅读全文
摘要:原题链接 考察:思维 思路: 制造$n$个$d$位互不相同的数字,$dfs$即可 ##Code #include <iostream> #include <cstring> #include <vector> using namespace std; typedef long long LL; co
阅读全文
摘要:原题链接 考察:计算几何 思路: 已知两点和半径可以确定一个圆,最优解的圆一定可以偏移直到相交于两点.至于怎么求圆心看 GO 求正反两遍,求不用讨论谁上下问题. ##Code #include <iostream> #include <cstring> #include <cmath> using
阅读全文
摘要:原题链接 错误思路: 枚举每一个人,优先队列贪心求最小的不重合区间组数. 思路: 实际上贪心不一定能贪到正解,这里类似背包需要枚举所有可能.背包体积是时间: $$f[i] = f[i-1],f[node[pos].l]+w $$ 需要按区间右端点排序. ##Code #include <iostre
阅读全文
摘要:原题链接 考察:模拟(?) 思路: 分类讨论就完事. (1) \(n=1\) (2) \(n=2\),这里一定要分$d = 0$的情况. (3) \(n>2\),这里一定要注意$cnt = 0$的情况,此时合法的情况是只有两种公差,且大公差一定是小公差的$2$倍. ##Code #include <
阅读全文
摘要:原题链接 考察:思维 看题目:woc好复杂 看大佬题解:我果然zz 思路: 如果要想的话需要分解到每一位考虑,第i位有几种可能,然后累乘.可以发现第i位的可能数就是第i位字母种数. ##Code #include <iostream> #include <cstring> using namespa
阅读全文
摘要:原题链接 考察:思维 错误思路: 预处理对角线和,枚举每一个点,发现与该点相邻的点都不冲突. 错误原因: 但凡图画大点就可以发现不止是相邻的点,也不是用相邻的点对角线路过的点. 思路: 正解是与枚举点奇偶性不同的点.....直接暴力枚举完事. ##Code #include <iostream> #
阅读全文
摘要:原题链接 考察:思维 思路: 说实话想到了取模,但是没细想下去,还以为前面的位数需要*10,但实际不用,求前缀模直接$L[i] = (L[i-1]*10+x)%a$.但是后缀模没有办法,只能求$10^i$模数. ##Code #include <iostream> #include <cstring
阅读全文
摘要:原题链接 考察:树形dp(?) 思路: 主要利用的两个性质: (1) 以树的重心为根时,所有子树的大小都不超过整棵树大小的一半. (2) 把两棵树通过一条边相连得到一棵新的树,那么新的树的重心在连接原来两棵树的重心的路径上. 注意性质1不是子树的和,以贪心来考虑的话,我们对于根节点$u$,其最大的子
阅读全文
摘要:原题链接 考察:DFS 错误思路: 一开始想的是数位dp,然后发现数字是由两部分构成,后面取值范围不仅取决于后面的数字是否取到了$a[pos]$,也取决于前面数字是否取到最值.然后发现数位dp做不了= = 正确思路: 可以发现数字最多是7位,不考虑7位上重复最多$7^7$种方法.直接DFS枚举,再分
阅读全文
摘要:原题链接 考察:hash 思路: 二维hash模板题,先横着做一遍hash,再纵着坐一遍前缀和hash.获得$a,b$矩阵的hash值参考了前缀和公式: \(sum[i,j] - sum[i,b]*p1[j-b]-sum[a,j]*p2[i-a]+sum[a,b]*p1[j-b]*p2[i-a]\)
阅读全文
摘要:原题链接 考察:欧拉回路(?) 思路: 每个点$u$与$a = (u<<1)&((1<<n)-1),a+1$有一条有向边,也就是每个点的入度 = 出度 = 2.必然存在欧拉回路,$dfs$即可 但是看了网上的题解都没说为啥可以这样$dfs$,这里如果遇到遍历后的点回退,这个点与上一个遍历过的点一定有
阅读全文
摘要:原题链接 考察:欧拉路径 思路: 有向图存在欧拉路径:所有点入度 = 出度或除两个外入度 = 出度. 但此条件有个大前提就是边连通,判断边连通需要:并查集或者dfs ##Code #include <iostream> #include <cstring> using namespace std;
阅读全文
摘要:原题链接 考察:欧拉路径 思路: 根本不难,注意$ans$数组不要开小了..... ##Code #include <iostream> #include <cstring> using namespace std; const int N = 510; int m,g[N][N],d[N],max
阅读全文
摘要:原题链接 考察:欧拉回路 思路: 模板题.主要点在删除边,邻接表删除边需要将$road[i].ne$改变,否则时间复杂度是$O(m2)$,修改后的时间复杂度是$O(n+m)$. 关于$dfs$为什么用&,这是回溯时,直接得到的就是新的边,如果我们用$h[u]$修改,那么下次回溯时我们还是用的原来的边
阅读全文
摘要:原题链接 考察:欧拉路径 思路: 主要是看懂这句:**保证:铲雪车从起点一定可以到达任何街道。**这句话的意思是说铲雪车在某条道路上.结合题意发现每个点的入度出度相等,构成欧拉路径.由此答案就是所有路径和*2. ##Code //每条边都是双向道,所以每个点入度 = 出度,存在欧拉回路 #inclu
阅读全文
摘要:原题链接 考察:状压dp 虽然在二分图题单里...但我感觉是考察的状压dp.. 思路: \(n<=15\),枚举二进制,0是一个集合,1是一个集合.二分图存在当且仅当图内两点集合不存在边.我们求最小的边集合即可. ##Code #include <iostream> #include <cstrin
阅读全文
摘要:原题链接 考察:二分图匹配 思路: 最小路径点覆盖.每个任务的接连完成构成一条简单路径,求最少的简单路径覆盖所有的任务点. ##Code #include <iostream> #include <cstring> using namespace std; const int N = 510; ty
阅读全文
摘要:原题链接 考察:二分图匹配 思路: 实际考察最小覆盖点.将文物与它的关键点建边.除此之外我们需要将点分为两个集合.可以发现每个点与它的关键点奇偶性不同.由此将点分为$x+y$为奇和偶两个集合. 注意建边,需要$(x,y)\(为关键点与文物建边,\)(x,y)$与它的关键点建边. ##Code #in
阅读全文

浙公网安备 33010602011771号