随笔分类 - 题解
摘要:仅仅是个模板 \(Code\) #include<cstdio> #include<queue> #include<iostream> #include<cstring> using namespace std; const int M = 50000 , N = 5000; int n , m ,
阅读全文
摘要:题目 解析 \(Code\) #include<cstdio> #include<map> #include<iostream> #include<cstring> using namespace std; typedef unsigned long long LL; const int N = 7
阅读全文
摘要:题目 解析 多种解法:有上下界费用流(nb),树形DP等 而由于我太菜,前者待日后再补 下面介绍树形DP的解法 首先我们等发现一些性质: 最后使方差最小,树的每个点权值必然在 \([sum/n..sum/n+1]\) 之间,其中 \(sum\) 指石油总和 那么我们可不可以试试枚举最后有多少个点为
阅读全文
摘要:解析 也就是说建一棵权值线段树维护这些信息。要注意的是每次的最优解必然是 \(b\) 小的先做,故离线排序确定离散后的下标再依次求解 \(Code\) #include<cstdio> #include<algorithm> #define ls (k << 1) #define rs (ls |
阅读全文
摘要:解析 这道题比较水。 求最快什么时候做完作业? 如果要最快完成第i份作业,那么是i的前继那些作业都要完成之后才能够完成i,所以,为了尽快完成i,我们要把i的前继的作业全部先做完。 最慢什么时候做完作业? 也就是说再不完成i的前提下,我最多能够做多少作业。那哪些作业是不可以做呢?其实就是它的后继。 那
阅读全文
摘要:题目 求十进制 \(n!\) 在 \(m\) 进制下末尾 $0$ 的个数 分析 签到题 只要看 \(n!\) 有多少个 \(m\) 的倍数就好了 考虑分解 \(m\) 的质因子 然后根号计算每个因子在 \(n!\) 中有多少个 取能取到的最小值就行了 \(Code\) #include<cstdio
阅读全文
摘要:分析 近乎裸的 \(cdq\) 分治数点问题 我们考虑一个数被删去,它对删后区间逆序对个数的影响就是减去现存序列中前面比它大的个数再减去现存序列中后面比它小的个数 那么我们考虑如何处理时间限制 既然是“现存序列中”,也就是说删去时间比它晚的 那么能产生贡献的数对 \((i,j)\) 就要满足 \(i
阅读全文
摘要:题目 解析 设 \(f_{i,j}\) 表示 \(i+1..n\) 个人能受到 \(j\) 次攻击的概率 因为选人出局的顺序是无所谓的,所以我们设从 $1..n$ 依次选人出局 那么转移时需要分类,分类即加 选第 \(i\) 个人出局,那么 \(i+1..n\) 会受到 $1$ 次攻击。先前攻击了
阅读全文
摘要:题目 思路 结论题,我不会证明: 找到第一个 \(|S_n| \leq m + 1\),那么答案就是 \(m - |S_{n-2}|\) 证明?我说了我不会,就当结论用吧 这已经很恶心了 然而这题还要打高精度?! 斐波那契数列太大了 注意有很多细节问题 就当留个高精度的优美板子吧! \(Code\)
阅读全文
摘要:真正的模板!! 网上的标臭得一匹!! \(Code\) #include<cstdio> #include<algorithm> using namespace std; typedef long long LL; const int N = 1e6 + 5; int n , X[N << 1];
阅读全文
摘要:题目大意 用边长为 \(k\) 的正方形在平面内覆盖,求它能覆盖的最大点权和 思路 $60$ 分:其实很容易想到按它们的横坐标先后排序,然后单调队列维护。复杂度 \(O(n k \log k)\) 然而考试时我直接修改了队列,导致 \(WA\) 到了 $10$ 分!改后又由于各种问题使它只 \(TL
阅读全文
摘要:留个高精度的模板 \(Code\) #include<cstdio> #include<cstring> using namespace std; int n , a[5005] , b[5005] , c[5005]; inline void Mul() { while (c[0]) c[c[0]
阅读全文
摘要:题目 求满足 \(a_i \leq a_j,b_i \leq b_j,c_i \leq c_j\) 的三元组的个数 输出个数范围为 \([0..n-1]\) 的每种个数出现的次数 解析 \(cdq\) 分治版题,三维数点 先让第一维排序,然后归并思想排序第二维 考虑分治的左区间对右区间的贡献 每次用
阅读全文
摘要:思路 注:上图只是个例子,其实建图时 $5$ 是不会连向 $6$ 的 \(Code\) #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n , m , mp[55][55] , f[55 *
阅读全文
摘要:思路 考虑一个点要不要翻,如果它左边的点为 $1$,那么它必须翻 所以我们可以从左往右一列一列地翻 先枚举第 $0$ 列的状态 然后之后的列就确定了 判断一下最后一列是不是 $0$ 就行了 状压快速翻 \(Code\) #include<cstdio> #include<cstring> using
阅读全文
摘要:状压玩疯了 \(Code\) #include<cstdio> #include<iostream> #include<cstring> using namespace std; int f[16][1 << 16] , st[1 << 16] , t[16] , d[16] , up[16]; i
阅读全文
摘要:解析 考场时想多了,其实根本不用分阶段 一维状压 \(DP\) 就行了 可我没想清楚,加了个第几次去稳固一个点的阶段 然后时间就炸了!!! \(Code\) #include<cstdio> #include<cmath> #include<algorithm> using namespace st
阅读全文
摘要:题目大意 维护一个 $01$ 序列最长的连续相邻两个数不同的子序列的长度 解析 很裸的线段树题。。。 要维护的信息很多 区间长度 区间最左端点 区间最右端点 区间最长前缀 区间最长后缀 区间最终的答案 前三个直接从左右儿子获取即可 区间最长前缀先为左儿子的区间最长前缀 如果左儿子的区间最长前缀为左区
阅读全文
摘要:【模板】普通平衡树 平衡树模板 解析 虽然是平衡树模板,然而我要写的是权值线段树... 珍贵的好看的我自己写的标... \(Code\) #include<cstdio> using namespace std; const int N = 1e5 + 5 , Len = 2e7 + 10 , V
阅读全文
摘要:题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) 轮操作后每一个位置产生逆序对个数比 \(k\) 小的都没了,比 \(k\) 大的都减了 \(k\)
阅读全文