摘要: 点对的权值都是可以拆的 逆用完全平方公式,将两两乘积之和转化为和的平方 阅读全文
posted @ 2024-07-22 23:03 D06 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 除了扫描线,二维前缀和也可以O(\(n^2\))地求出矩形的面积并,且两种方法的前提都是离散化 二维差分:在矩形的四个顶角做标记,也有容斥原理的影子 变量名不能起y1,y2似乎还是C++98时代的事情,打开-std=c++11就没有这个问题了;现在连NOIP都使用C++14标准了,所以应该不用管这种 阅读全文
posted @ 2024-07-22 21:50 D06 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 汉明码的精髓在于,既然你无法分辨更改检验位的情况,就把检验位放到冲突的位置,消掉那一位 位运算的性质:a+b=(a|b+a&b) \(a\oplus b\oplus 0\)+\(a\oplus b\oplus (111…11)\)=111…11 其实D题才是最简单的题目,比赛的整体难度低于省赛,明年 阅读全文
posted @ 2024-07-21 23:02 D06 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 位运算的性质:各位之间的运算是相互独立的 因此,分别考虑每一位的方案数,显然比你的考场做法更优 点击查看代码 #include <bits/stdc++.h> using namespace std; long long p[20]; int main() { p[0]=1; for(int i=1 阅读全文
posted @ 2024-07-21 11:19 D06 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 直接做很难下手。考虑“出现次数的立方值”的组合意义,就是在原序列中选三个相同的子序列的方案数,然后DP即可 利用容斥原理计算高维前缀和 老生常谈的取模后运算得负数的问题 点击查看代码 #include <bits/stdc++.h> using namespace std; const int mo 阅读全文
posted @ 2024-07-19 20:25 D06 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 鸽巢原理/抽屉原理:假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素 首先,将\(x\)整除\(|a_u-a_v|\)转化为它们模x同余 有n个点,x=n-1时,根据鸽巢原理,一定可以找到这样的两个同余的点,将它们连边 以此类推,解毕 模拟样例以感受题意 点击查看代码 #inc 阅读全文
posted @ 2024-07-19 19:45 D06 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 从顶层设计的角度考虑,我们并不关心具体的放置骨牌的方法,而只关心这种覆盖是否可行 而一种覆盖可行等价于该覆盖中不存在“L型” 于是我们就可以优化轮廓线DP的设计以省去DP中构造方案所需要的时空复杂度 本题似乎还卡STL,下次涉及到大量入队出队操作的时候还是手写队列吧,毕竟也就一分钟左右的事 关于程序 阅读全文
posted @ 2024-07-17 18:49 D06 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 为了利用位运算的良好性质,采用四进制状态压缩代替三进制 通过哈希表压缩有限的状态 与普通的按行滚动的滚动数组不同,插头DP中的滚动数组是按格滚动的 因为布尔数组值默认为false,所以我们可以用“true”代表“可通行” 转移时需要找到与之匹配的括号——实现算法时不能够总是代入理想模型 点击查看代码 阅读全文
posted @ 2024-07-16 23:16 D06 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 对多项式求逆有了更深刻的理解,如1-x的逆是1+x 多项式或许可以用向量存储,并重载运算符 如果参与相乘的两多项式的其中一项项数较少,建议直接朴素相乘,使用NTT反而会降低效率导致TLE NTT中step的值需要开一个桶存下来以避免重复计算,否则也会TLE f(\(x^2\))、f(\(x^3\)) 阅读全文
posted @ 2024-07-11 20:37 D06 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 借这道题夯实一下计算几何的基础 向量积:顺负逆正 两线交点和夹角都是借助向量工具求解的 分类讨论:圆弧小于180度时,减去三角形面积;大于180度时,加上三角形面积 割补法求面积(正难则反) C++中的角度以弧度制表示 点击查看代码 #include <bits/stdc++.h> #define 阅读全文
posted @ 2024-07-10 20:56 D06 阅读(5) 评论(0) 推荐(0) 编辑