06 2019 档案
摘要:要点 官解使用的哈希,给每个数一个二维键值,这样每个排列就有唯一的键值,再预求一下所给数列的前缀键值,暴力寻找有多少个答案即可。 C++ include include include include include using namespace std; typedef long long ll
阅读全文
摘要:要点 与cf 1168C相似的一点都是看某点x最远能拓展到哪里 看数据想要在logn内查询,考虑倍增步数 C++ const int maxn = 2e5 + 5, X = 5e5 + 5, LOG = 25; int n, m; int l, r; int dp[X][LOG];//点i走pow(
阅读全文
摘要:要点 显然ac自动机的板子就可以暴力一下答案了 为了优化时间复杂度,考虑套路fail树的dfs序。发现本题需要当前这个尾点加上所有祖先点的个数,考虑使用树状数组差分一下,在父点+1,在子树后 1,每次询问前缀和即可 C++ include include include include includ
阅读全文
摘要:要点 都在注释里了 C++ include include include include include using namespace std; typedef double db; const int maxn = 1e5 + 5; int n; db l, v1, v2; db a[maxn
阅读全文
摘要:要点 题意:可以拐弯,即哈密顿距离 注意不可以直接一个一个搜,这过程中会把下一轮的标记上,导致同一轮的其它点没能正常完成应有的搜索 因此采用双层广搜,把同一轮先都出队列再的一起搜 C++ include include include include include include include
阅读全文
摘要:方法一 黑白棋盘拥有性质:(r + c) % 2的值决定颜色 因此把某色全部反转,直接求另一色的最大矩形即可,单调栈的经典问题
阅读全文
摘要:要点 将边作为染色,如果交叉则异色 C++ include include include using namespace std; int n, m; int a[101], b[101], c[101]; int main() { scanf("%d %d", &n, &m); for (int
阅读全文
摘要:要点 没想到的一点是,对于堆里的某牌,最好情况是它出来时后边都准备就绪了,答案是p[i] + (n i + 1),所有的这个取最大的即可 一发结束的情况先特判一下 C++ const int maxn = 2e5 + 5; int n, pos, ans; int a[maxn], b[maxn
阅读全文
摘要:虽然不是正解但毕竟自己做出来了还是记下来吧~ 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE。 C++ include include include include include using namespace std; const int maxn = 51,
阅读全文
摘要:要点 用A、B、C一般式确定每条直线 将合法的圆心中点存到每条直线所属的vector中 枚举所有线段,二分后O(1)得到其中存在多少答案,累加 C++ include include include include include include include include using na
阅读全文
摘要:要点 反思:以前是在紫书上做过的…… dp[i][j]是从1引两条路到达i、j的最大值 为了不相交,则dp[i][i]都是非法的,不转移它,也不用它转移 C++ include include include include include include include include i
阅读全文
摘要:要点 序列是n个不同的数,则新学到的一种策略就是二分这个位置的答案,然后可以上下调。 神奇地只关注大于还是小于mid并赋值0、1,这样m个操作的排序就能用线段树维护了!
阅读全文
摘要:反思 由于受我第一次遇到的构造最多三角形的题的影响,这种几个分成一组最多多少组的题我老是往贪心上想。 事实上一般贪心也能贪,但这道题,还有突然想起的前些天做的cf140C,都是用二分可以更简单地解决,原因之一是分配最多的组数一般具有单调性。 想到二分就是水题了。
阅读全文
摘要:要点 红蓝点分别求凸包显然 判断两凸包是否相交方法:所有红点不在蓝凸包内,反之亦然;所有红凸包线不与蓝凸包线相交,反之亦然。 书上让特判一下凸包退化成点或线段的情况,为什么我感觉代码仓库的代码并没特判并且线段交和点在线段上写的是不包含端点的??? C++ include include includ
阅读全文
摘要:要点 凸包显然 长方形旋转较好的处理方式就是用中点的Vector加上旋转的Vector,然后每个点都扔到凸包里 多边形面积板子求凸包面积即可 C++ include include include using namespace std; typedef double db; const db ep
阅读全文
摘要:有生之年我居然也能不看题解做出来题QAQ…… 发现c、d是0、1序列而不是随机数列说明有蹊跷,于是发现负数直接配0,正数配1即可。不知道哪个最小,那就全求一下吧……我的做法的坑点是数正好为1时不可以选。 C++ include include include include using namesp
阅读全文
摘要:要点 题目链接 1e18的数据无法O(n)的容斥,于是推式子,官解,其中式子有点小错误 不必预处理mu,直接按照素数的个数判断正负即可
阅读全文
摘要:要点 外层暴力枚举转的“角度”,会发现肯定是n的约数 对于m条线段想判定当前的“角度”是否ok,每个线段只要管它自己的下一个即可,不必画个圈遍历一遍 之后将本来的线段集合和当前需要的线段集合比较,如果相同则该图形旋转对称 一个小优化是只需要枚举n的质约数,质约数d含义为把圆划分成d份。这样划分成6份
阅读全文
摘要:自己的一点想法 举几个例子后发现是谁先手痒痒把某一堆掏空了那他就GG了,因此要尽量让对方不得不掏空某堆。 用最简单的举例后发现:1 1 1 1 1 1,扔给谁谁完蛋;1 1 1 1 1 2,一样的,肯定得动1的部分;1 1 1 1 2 2,还是败;1 1 1 2 2 2,这个就不一样了,这是胜局面,
阅读全文
摘要:要点 头尾的最长相同只要一个kmp即可得,于是处理中间部分 扫一遍记录一下前缀的每个位置是否存在一个中间串跟它相同,见代码 如果当前没有,接着用Next数组去一找即可 C++ include include const int maxn = 1e6 + 5; char s[maxn]; int Ne
阅读全文
摘要:要点 发现每行每列都得有1 发现无论怎么换,在同一行的永远在同一行,同一列的永远在同一列 于是换行貌似没什么用啊,换列就够了。换列无法做到则无答案 于是变成了行与列进行二分匹配 C++ include include int T, n, a[205][205]; int match[205], vi
阅读全文
摘要:要点 找凸包上的线很显然 但每条线所有点都求一遍显然不可行,优化方法是:所有点都在一侧所以可以使用直线一般式的距离公式\frac{|A \sum{x}+B \sum{y}+C n|}{\sqrt {A^2+B^2}}O(1)算出总距离 C++ include include include
阅读全文