06 2020 档案
摘要:按逆时针方向依次给出多边形 \(n\) 个顶点,求多边形的面积。 公式: \[ Area=\frac{1}{2}|\sum\limits_{i=1}^{n}\overrightarrow{OP_i}\times \overrightarrow {OP_{i+1}}| \] (其中 \(P_{n+1}
阅读全文
摘要:计算几何是几何学的一个重要分支,也是计算机科学的一个分支。常常需要通过计算机来完成大量、繁琐的运算,这也是它们被称为“计算几何”的原因吧!(实在想不出话说了,抄了数学一本通上的一段话当开场白) 基本算法 一些基础的计算几何算法,学习之前只需要知道矢量的运算及一些几何中最基本的定义(如平面直角坐标系,
阅读全文
摘要:给一个 \(n\) 个点的多边形,给一个点 \(P\),问点 \(P\) 是否在多边形内(或多边形上)。 我们随便画一个多边形,随便在多边形内点一点,随便向外发一条射线,可以发现这条射线与多边形的交点个数为奇数。然后就做完了。 对这条性质的简单证明:我们发现多边形内一点想要到外面,必须经过一条边,如
阅读全文
摘要:给定两线段 \(P_1P_2\) 和 \(P_3P_4\),要求判断他们是否相交。 通过两个步骤完成判断: 快速排斥实验。如果两个线段相交,那么分别以这两个线段为对角线的矩形一定相交(包括只有公共边或只有公共点的相交)。我们首先判断这两个线段是否满足这个条件。 跨立实验。如果这两个线段幸运的通过了上
阅读全文
摘要:给定四个点 \(A,B,C,D\),问点 \(D\) 是否在 \(\triangle ABC\) 中(边上或内部)? 考虑叉积可以非常容易的判断:把三角形看首尾相连的三个矢量 \(\overrightarrow {AB}\ \overrightarrow{BC}\ \overrightarrow{C
阅读全文
摘要:给定点 \(Q,P_1,P_2\),问点 \(Q\) 是否在线段 \(P_1P_2\) 上。 首先运用矢量的叉积可以很方便地判断点是否在给定线段的直线上:若 \(Q\) 在直线 \(P_1P_2\) 上,则 \(\overrightarrow{P_1Q}\times \overrightarrow{
阅读全文
摘要:生成树顾名思义是对原图提取一些边来生成一棵树。 例题: CF840B Leha and another game about graph 题解
阅读全文
摘要:首先给出一个结论:给定一个连通图,要求构造一个给定每个点度数奇偶性的图(不要求连通,但新图的边集是原图边集的子集)。若奇点个数为奇数则无解;反之则一定有解。 无解非常好理解:因为图的所有点的总的度数一定为偶数,所以奇点个数显然不可能为奇数。 下面将通过构造的方式证明后者一定有解。 如何同时改变两个点
阅读全文
摘要:一种非常特殊也算是好玩的题型吧,可以通过与交互库的交流来获取信息,感觉非常考验人类智慧。 例题: CF1364E X-OR 题解
阅读全文
摘要:蒟蒻的第一道正式交互题QWQ。 首先我们要明确一点:如果知道了排列中 $0$ 的位置,所有其他位置均可以通过一次询问求出。所以我们的思路是首先找到 $0$ 的位置。 考虑一个暴力的判断一个位置 \(x\) 是否是 $0$ 的方法: 随机出 30个值域在$[0,n-1]$范围内的数,记作 \(a\)
阅读全文
摘要:首先把两个字符串拼在一起,中间夹一个不可能出现的字符。 然后就是一个简单容斥,我们假设给的字符串为 \(S_1\) 和 \(S_2\),新拼成的字符串为 \(S\),那么答案就是求 \(same(S)-same(S_1)-same(S_2)\),其中 \(same(s)\) 表示 \(s\) 这个字
阅读全文
摘要:\(dsu\ on\ tree\) 是一个树上优化暴力,在统计每个子树信息的时候可以做到 \(O(nlogn)\) 大致思路:先轻重链剖分,然后统计每棵子树信息的时候先递归所有轻儿子(回溯时清空信息),最后递归重儿子(回溯时不清空信息)。 最重要的就是时间复杂度分析了吧(其实非常简单):我们发现一个
阅读全文
摘要:先考虑一个简单容斥:设 \(val(x)\) 表示 \(x\) 子树内所有点作为 \(LCA\) 的贡献之和,那么以 \(x\) 为 \(LCA\) 的贡献就是 \(val(x)-\sum\limits_{v\in son\ of\ x}val(v)\)。 现在的问题就是如何求 \(val(x)\)
阅读全文
摘要:题目大意是维护一个序列,规定区间加法为给区间每个数加上对应的 \(fibnacci\) 数列的一项。 我刚拿到题想到了直接下传标记、标记永久化等一堆显然错误的算法。错误原因是标记不能合并,所以时间复杂度得不到保证。 看到一种非常神仙的做法,用到了 \(fibnacci\) 数列的一个性质: \[ f
阅读全文
摘要:\(Day\ -50 \ to \ Day\ -2\) 毫无游戏体验的蒟蒻膜你赛瑟瑟发抖。。。校内膜你赛经常弃赛或者打完暴力就走人,所以几乎每次都能在排行榜的榜尾发现我反向$rk1$。天天被 Binary_Search_Tree 等神仙爆踩。 \(Day\ -1\) 说实话今天是体验最好的一次膜你赛
阅读全文
摘要:对于一个字符串$S$,我们记后缀 \(Suf_i\) 为从 \(i\) 开始一直到末尾所形成的子串(\(S_iS_{i+1}...S_{len}\))。 现在我们要对所有后缀按照字典序排序。记 \(sa_i\) 表示排名第 \(i\) 的后缀的起始位置,\(x[i]\) 表示 \(Suf_i\) 的
阅读全文
摘要:模板题,代码如下: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N=1000009; int n,m,x[N],y[N],c[N],s
阅读全文
摘要:AC自动机是Trie树与KMP思想的结合。用于多模式串匹配。 和KMP一样,它的原理就是:对所有模式串建一个Trie。任意一个串扔进去,得到的就是在Trie树上最长能匹配的后缀,我们把文本串的每个前缀依次加进去(前缀的后缀就是子串),就能得到模式串与文本串的关系了。 考虑到怎么实现这个功能:和KMP
阅读全文
摘要:KMP算法用来求单模式串匹配。 简单来说,你需要给你的模式串计算一个 \(nxt\) 数组,使得 \(nxt[i]\) 是长度为 \(i\) 时的最长公共前后缀。 匹配到文本串的一个位置 \(i\) 时,相当于把文本串长度为 \(i\) 的前缀拿出来,找它的最长后缀(前缀的后缀即是子串)使得能与模式
阅读全文
摘要:模板,代码如下: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int N=1000009; char s1[N],s2[N]; int nxt
阅读全文
摘要:整体二分也是一种非常妙的分治算法。 大致流程: 记$solve(l,r,x,y)\(表示\)[x,y]\(这些询问,他们的答案范围在\)[l,r]$内,并设$mid$ 为$[l,r]$的中点 我们先把$[l,mid]\(内的影响计算,再对每个询问:若此询问已经满足要求,则他们所属答案区间为\)[l,
阅读全文
摘要:此题可以使用整体二分解决。 我们发现把所有国家收集陨石的情况都查一遍的总复杂度是固定的,那么这时候我们就可以放心的使用整体二分: 记$solve(l,r,x,y)\(表示\)[x,y]\(这些国家,他们的答案范围在\)[l,r]$内,并设$mid$ 为$[l,r]$的中点 我们先把$[l,mid]\
阅读全文
摘要:这题因为一些弱智错误调了好久。。。 考虑如何判断一个数是否是一堆数的中位数(不经过排序):记你想要判断的数为$mid$,然后把 \(\geq mid\) 的数设为$1$, \(\leq mid\) 的数设为$-1$,然后给这些数求个和,若$sum<0$,则 \(mid\) 比真正的中位数大,反之则比
阅读全文
摘要:操作过程在那里写的非常清楚了,这里主要粘一下代码: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; typedef long long LL; const i
阅读全文
摘要:我学习的时候看的blog 珂朵莉树(又称ODT,Old Driver Tree),可以用来解决一类有区间赋值并且数据随机的问题。 其实ODT就是两个主要函数($Assign$和$Split$ 操作),时间复杂度的保证其实也都来源于此,其他所有的操作都是直接暴力解决。特别要注意的是,此题一定要有区间整
阅读全文
摘要:线段树分治真的难写。 二分图判定的条件是图中不存在奇环。我们可以用带权并查集来维护。现在的难点就在于对线段树$DFS$时回溯的时候如何删除影响。 这里可以使用可删并查集:注意到我们加入影响和删除影响的过程就是维护栈的过程,我们可以放弃并查集的路径压缩(我们按秩合并也可以保证复杂度),并在加入边时记录
阅读全文
摘要:普通线段树 普通的线段树先不谈,我们来看一点比较高级的科技。 直接给一些好题: luogu CF446C DZY Loves Fibonacci Numbers 题解 线段树分治 啊啊啊今天突然发现全机房只有我不会线段树分治。。。 有时我们会在时间轴上进行一些操作,或者清除我们之前的操作。这时候我们
阅读全文
摘要:应该算是我做的正儿八经的容斥的第一道题吧。 直接做时间复杂度是$O(4nS)$的,显然不能接受。注意到这题只有$4$个物品,考虑容斥。 容斥模型: 元素:每一种方案 全集:所有组合总和为$n$的方案 属性:对每个物品购买的数量限制 这道题显然是对每个属性求交集,于是转化成了全集-补集的并集模型,由于
阅读全文
摘要:通常套路是设$f[x][]$表示$x$节点怎么怎么样(编不下去了)。 例题: luogu P3047 [USACO12FEB]Nearby Cows G 题解 计蒜客 T3225 Darko 的生成树 题解
阅读全文
摘要:这道题直接设状态不太好做。 我们先设$g[x][i]$表示$x$子树内跟它相距不超过$i$的点的点权之和。这个一遍$dfs$就可以搞定。 现在的问题是怎么计算非$x$子树内的贡献(我当时想了好久楞是没想出来呜呜呜)。其实很简单,有了$g$数组的辅助,我们现在可以直接设$f[x][i]$表示与$x$相
阅读全文
摘要:前置知识:常用公式 干货来啦,这里记录了一些推柿子是使用频率很高的公式(貌似可能也不知道有没有证明),善用这些公式可以带来极大的简洁。 \[ d(ij)=\sum\limits_{x\vert i} \sum\limits_{y\vert j}[gcd(x,y)=1] \] Siyuan 博客中的证
阅读全文
摘要:BK算法使用搜索+剪枝来寻找无向图最大团。 一些定义 团:完全子图。 最大团:点数最大的团。 最大独立集 :最大的点集使得点集中任意两点都没有边直接相连。 (以上摘自OI wiki) 算法流程 先定义一些数组和变量(有的是$dfs$里的变量): $cnt[i]$表示从$i-n$这些点的最大团点数 $
阅读全文
摘要:这道题要求的就是一个图的最大独立集,而我们知道一个图的最大独立集等于这个图的补图的最大团。使用BK算法求解即可。 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace
阅读全文

浙公网安备 33010602011771号