摘要: POI #Year2006 #字符串 #妙妙题 #hash 结论 对于两个回文串,当且仅当两个串的最小循环节相同,这两个串拼起来是一个回文串 那么就可以用 \(kmp\) 维护,最短循环节的长度为 当 \(m\mod nxt_m=0\) 时为 \(m-nxt_m\) 否则为 \(m\) 然后 \(h 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: POI #Year2006 #贪心 #暴力 如果将所有的列干掉,那么贪心的如果可以删除一列就优先删除一列 当左右列不可以删除时,考虑上下行先删除谁不好判断 考虑在操作之前先枚举上面删除多少行,这样在操作时就可以贪心的使得下面删掉的行尽可能少 也就是贪心先删除上面 // Author: xiaruiz 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(7) 评论(0) 推荐(0)
摘要: 最短路 #状压dp #滚动优化 #POI #Year2007 从前 \(k\) 个跑 \(dijksta\) ,对这 \(k\) 个点到达的状态状压 会 MLE ,考虑每次转移都只会增加一个状压下的 \(1\) ,按照 \(popcount\) 分组做滚动 // Author: xiaruize c 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(8) 评论(0) 推荐(0)
摘要: POI #Year2007 #贪心 #树状数组 考虑每一对数的最小代价为,将当前的换到最近的下面 用树状数组记录中间有几个没有被消掉的 // Author: xiaruize const int N = 2e5 + 10; int n, m; int la[N]; struct BIT { int 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: POI #Year2007 #并查集 #贪心 按高度从小到大按顺序考虑每个点,将同样高度的点按顺序全部合并完,然后再遍历这些同样大小的点,如果一个点为关键点且它的联通块中没有抽水机,那么这个位置联通块的最低位置放一个抽水机 可以证明这个贪心是最优的 // Author: xiaruize const 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(14) 评论(0) 推荐(0)
摘要: 进制 #背包dp #贪心 注意到呈倍数的性质,考虑按照倍数转换进制,贪心的选择小的按顺序选择 // Author: xiaruize const int INF = 0x3f3f3f3f3f3f3f3f; const int MOD = 1000000007; const int N = 2e5 + 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(11) 评论(0) 推荐(0)
摘要: POI #Year2008 #贪心 #最大子矩形 #单调栈 先把所有的\(a_{i,j}>2k\) 的 \((i,j)\) 先标记,然后考虑不包含这些点的最大子矩形 如果这个子矩形的 \(sum>k\) 那么必然存在一个合法矩形,可以这样构造 如果当前行的 \(sum_x<k\) 那么删除 \(x\ 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(21) 评论(0) 推荐(1)
摘要: Year2008 #POI #贪心 #数学 考虑枚举旋转了几次,维护一个前缀和,一个前缀和的 \(min\) ,目标为使和合法并使前缀 \(min\) 满足条件,这个代价就可以 \(\mathcal{O}(1)\) 计算 // Author: xiaruize const int INF = 0x3 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(8) 评论(0) 推荐(0)
摘要: dp #POI #Year2008 倒着跑这个过程,发现为每次拓宽一个矩形,记录这个矩形的对角的坐标,当前的方向,可以得到 \(dp_{x_1,y_1,x_2,y_2,4}\) ,从同方向相邻的点,或者转向后经过一条边长的点转移过来,单次转移是 \(\mathcal{O}(1)\) 的 但是这个会 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: 哈希 #STL #POI #Year2008 对于每个串做 \(hash\) ,每次操作后只对被影响的等价类更新答案 // Author: xiaruize int n, l, m; char s[1005][105]; multiset<ull> st; ull hsh[1005]; int re 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(12) 评论(0) 推荐(0)
摘要: POI #Year2008 #数学 #康拓展开 #逆元 如果是一个排列,根据康拓展开,答案为 \[\sum\limits_{i=1}^nsum_{i}\times (n-i)! \]其中 \[sum_{i}=\sum\limits_{j=i+1}^n[a_i>a_j] \]那么再加入了重复的数字之后 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(20) 评论(0) 推荐(0)
摘要: POI #基环树 #贪心 #Year2008 一定是若干棵基环内向树,以下仅考虑一棵的情况 最小值直接从下往上选,然后环上的为环的 \(siz\) 的一半 最大值为 \(n\) 减去叶子个数,再特判环上剩下一个的情况 // Author: xiaruize const int N = 1e6 + 1 阅读全文
posted @ 2024-04-15 19:41 xiaruize 阅读(13) 评论(0) 推荐(0)
摘要: 构造 #POI 对每一行和每一列建一个点 对于每一个开关\((i,j)\) 从 \(i\) 行向 \(j\) 列建边 问题转化为选择一些边 使得每个点的度的奇偶性相同 分类讨论 如果存在环 那么只选择这个环就可以满足条件 暴搜 否则原图不 存在度数全为偶数的解 并且为一个森林 所以叶子节点必定选中 阅读全文
posted @ 2024-04-15 19:40 xiaruize 阅读(14) 评论(0) 推荐(0)
摘要: Topcoder #区间dp 考虑 \(dp_{l,r,3}\) 表示当前考虑区间 \([l,r]\) ,上面一行全部 \(H\) 的最小代价,下面一行全部 \(H\) 的最小代价,上下都 \(H\) 的最小代价 转移考虑每次将两段拼起来,或者从现有的拓展一个 貌似有贪心做法,不太会喵~~~ // 阅读全文
posted @ 2024-04-15 19:40 xiaruize 阅读(12) 评论(0) 推荐(0)
摘要: 剪枝 #Topcoder 考虑爆搜,给这个加上最优性和可行性剪枝 具体来说,可行性判 \(3\times (cnt+possible)\geq 2n\) 最优性可以记录每个状态是否合法,对于有合法后继的,记录最大的 \(cur\),否则记录最多选几个数 // Author: xiaruize con 阅读全文
posted @ 2024-04-15 19:40 xiaruize 阅读(21) 评论(0) 推荐(0)
摘要: Topcoder #搜索 经典套路,我们发现枚举第一行后剩余的其实是确定的 那么枚举并爆搜即可 时间复杂度是 \(3^k\) 因为列的限制 // Author: xiaruize const int N = 13 + 10; int n, m; bool s[N][N], bck[N][N]; in 阅读全文
posted @ 2024-04-15 19:40 xiaruize 阅读(17) 评论(0) 推荐(0)
摘要: Topcoder #Floyd #状压dp Floyd 跑全源最短路,然后 \(dp_{msk,x}\) 表示在 \(msk\) 购物过,并且最后一次在 \(x\) 的最小完成时间,枚举一个转移即可,时间复杂度是 \(\mathcal{O}(n^3+2^kk\)) 的 // Author: xiar 阅读全文
posted @ 2024-04-15 19:40 xiaruize 阅读(20) 评论(0) 推荐(0)
摘要: Topcoder #dp \(\mathcal{O}(n^2)\) 的 \(dp\) 是容易的 考虑怎么优化,注意到对于 \(x\) 这个位置,它能贡献到的区间是 \(log\) 的 因为每遇到一个 o ,合法的左端点都会从当前位置扩大到 \(2\) 倍,所以最多有 \(log\) 次扩大,即 \( 阅读全文
posted @ 2024-04-10 10:12 xiaruize 阅读(20) 评论(0) 推荐(0)
摘要: Topcoder #枚举 #dp 枚举回文的行,考虑 \(dp_{i,j}\) 表示前 \(i\) 列和后 \(i\) 列中有 \(j\) 列为回文的列的最小代价 转移要分讨 // Author: xiaruize const int INF = 0x3f3f3f3f3f3f3f3f; const 阅读全文
posted @ 2024-04-10 10:12 xiaruize 阅读(8) 评论(0) 推荐(0)
摘要: dp #数学 #Topcoder 设\(s_1=\sum a_i,s2=\sum b_i\),选中的集合为 \(s\),设 \(p=[x\in s](a_x+b_x)\) 那么这个时候的 \(maxdiff=max(|s_1-p|,|s_2-p|)\) \(dp\) 求可以到的 \(p\) ,暴力 阅读全文
posted @ 2024-04-10 10:12 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: dp #性质 一个集合 \(s\) 满足条件,当且仅当 \(\forall x\in s, mindep_x<min_{y\notin s}mindep_y\) 枚举后面的那个,\(dp_i\) 表示前面选择 \(i\) 个的方案数,转移看code // Author: xiaruize const 阅读全文
posted @ 2024-04-10 10:12 xiaruize 阅读(15) 评论(0) 推荐(0)
摘要: 费用流 #二分图最大权匹配 #dp \(dp_{x,y}\) 表示以 \(x,y\) 为对应点的最大同构子树的大小 对于一对点,转移为将 \(x,y\) 中的点按照一定顺序对应 那么问题转化为如何求一组匹配,使得两两匹配的权值尽可能大,即一个二分图最大权匹配,可以费用流解决 然后枚举断开的每条边,对 阅读全文
posted @ 2024-04-08 15:17 xiaruize 阅读(19) 评论(0) 推荐(0)
摘要: 贪心 考虑什么样的数的集合满足条件,发现同一个二进制位不能有超过 \(2\) 个数为 \(1\) 加入第 \(i\) 个数要满足的条件为: 这个数与前面的每个数的 \(and\) 不为 \(0\) ,即每次占用一个前面的数的 \(1\) ,这个 \(1\) 必须是这个数仅有的 这个数必须有 \(n- 阅读全文
posted @ 2024-04-08 15:17 xiaruize 阅读(9) 评论(0) 推荐(0)
摘要: 数学 等价于在一个 \(n\times m\) 的矩形中做弹球,问经过的整点个数 \(t=gcd(n,m)\) ,将 \(n,m\) 分别除掉 \(t\) ,得到 \(n',m'\) 此时会有 \(n'm'\) 条线段,每条线段经过 \(t\) 个整点,另外还有 \(\lceil \frac{(n' 阅读全文
posted @ 2024-04-08 15:17 xiaruize 阅读(16) 评论(0) 推荐(0)
摘要: 数学 #计数 #容斥 分为 \(4\) 个部分计算 上面的按奇偶性分类 下面的按每一层容斥,即 \(siz_i-2\times siz_{i-1}+siz_{i-2}\) 左右直接对每一块计算面积 // Author: xiaruize const int INF = 0x3f3f3f3f3f3f3 阅读全文
posted @ 2024-04-08 15:17 xiaruize 阅读(18) 评论(0) 推荐(0)
摘要: 二分 具有单调性,考虑二分答案 对于 \(x\) 考虑怎么 \(check\),可以暴力的展开 \(x\) 次,再缩小 \(x\) 次,如果得到的结果和初始状态相同,那么就合法,否则不合法 // Author: xiaruize const int N = 1e3 + 10; int n; pii 阅读全文
posted @ 2024-04-08 15:17 xiaruize 阅读(13) 评论(0) 推荐(0)
摘要: 博弈 #计算几何 这要先手可以操作,那么一定存在必胜策略 所以题目转化为 判原来的多边形内有没有三个不共线的点 把所有点求出来判共线即可 // Author: xiaruize const int INF = 0x3f3f3f3f3f3f3f3f; const int MOD = 100000000 阅读全文
posted @ 2024-04-07 20:46 xiaruize 阅读(11) 评论(0) 推荐(0)
摘要: 高斯消元 #xor 考虑拆分限制分别算,对于一个 \(5=(101)_2\) 的限制,它等价于满足 \(0xx\) 和 \(100\) 的方案数的和 及将一个前缀的 \(1\) 转为 \(0\) ,保证这个 \(1\) 前面的字符全部相等,剩下的部分任取 然后就可以得到一些 \(xor\) 方程组, 阅读全文
posted @ 2024-04-07 20:46 xiaruize 阅读(9) 评论(0) 推荐(0)
摘要: 贪心 贪心的从下往上,对于当前位,如果这一位是任意的,那么如果它有儿子可以向上,那么当前点选择为翻转是肯定不劣的,而如果没有儿子向上,那么当前点选中一定是不优的 然后数向上的儿子个数,每 \(2\) 个可以合并为 \(1\) 条路径 如果一个点合并后不满足限制,则通过从当前点重新出发一条链来使它合法 阅读全文
posted @ 2024-04-07 20:46 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: 计数 枚举第一个区间的右端点,第二个区间的左端点,然后记录每个点前面第一个连续的 \(lim\) 个的位置,这个点往前连续的 \(g\) 的个数,对称在记录一遍 然后直接统计答案, 如果两个拼起来一段是可行的 考虑前面选的不够,后面去到一整段之后 前面和后面拼起来够,等差数列 前面足够长 否则 考虑 阅读全文
posted @ 2024-04-07 20:46 xiaruize 阅读(9) 评论(0) 推荐(0)
摘要: 二分 #单调队列 #bfs #POI #Year2006 具有单调性,二分 从上往下考虑每一行,对于每一列维护一个单调队列,考虑维护一个覆盖的区间,表示这一列的最近的圆的位置,然后就可以计算它的覆盖区间 用差分计算每个位置是否被覆盖,处理当前长度下每个点是否被覆盖 然后 \(bfs\) 即可 // 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(14) 评论(0) 推荐(0)
摘要: 费用流 #POI #Year2006 费用流模板题,暴力建图,限制一下流量 // Author: xiaruize #ifndef ONLINE_JUDGE #define debug(x) cerr << "On Line:" << __LINE__ << #x << "=" << x << en 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(11) 评论(0) 推荐(0)
摘要: 缩点 #dp #POI #Year2006 建反图, \(tarjan\) 缩点,在有向无环图上跑 \(topsort\),\(dp\) 计算方案数 超过 \(36500\) 的直接与 \(36501\) 取 \(min\) 就可以避免炸 \(long\ long\) 特判 最大方案数为从最后一个点 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(9) 评论(0) 推荐(0)
摘要: POI #Year2006 #字符串 #妙妙题 #hash 结论 对于两个回文串,当且仅当两个串的最小循环节相同,这两个串拼起来是一个回文串 那么就可以用 \(kmp\) 维护,最短循环节的长度为 当 \(m\mod nxt_m=0\) 时为 \(m-nxt_m\) 否则为 \(m\) 然后 \(h 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(18) 评论(0) 推荐(0)
摘要: POI #Year2006 #贪心 #暴力 如果将所有的列干掉,那么贪心的如果可以删除一列就优先删除一列 当左右列不可以删除时,考虑上下行先删除谁不好判断 考虑在操作之前先枚举上面删除多少行,这样在操作时就可以贪心的使得下面删掉的行尽可能少 也就是贪心先删除上面 // Author: xiaruiz 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(10) 评论(0) 推荐(0)
摘要: POI #Year2006 #妙妙题 #贪心 考虑从下往上按照拓扑序分层,对于每一层,这一层最多可以选择 \(min(2m,cnt)\) 个 考虑这个上界是否可以达到,这是一定可以的,通过将在下面结束的路径向上,可以做到每个点都被经过 所以直接统计 // Author: xiaruize #ifnd 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(13) 评论(0) 推荐(0)
摘要: 切比雪夫距离 #曼哈顿距离 #POI #Year2006 切比雪夫距离向曼哈顿距离转换 \((x,y)\rightarrow (\frac{x+y}{2},\frac{x-y}{2})\) 直接转换会炸精度,考虑先不除以 \(2\) 然后根据小学数学,可以将 \(x,y\) 分别排序,然后前缀和+二 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(19) 评论(0) 推荐(0)
摘要: 字符串 #kmp #POI #Year2005 考虑字符串做 \(kmp\) 考虑第 \(i\) 位的答案,假设 \(p=nxt_i\),考虑 \(res_p\) 在什么情况下是合法的 当最后一个 \(res_x=res_p\) 的 \(x\) 满足 \(x\geq i-res_p\) 时,那么 \ 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(17) 评论(0) 推荐(0)
摘要: 网络流 #二分 #POI #Year2005 考虑二分答案,用 \(Dinic\) 来 \(check\) 具体来说,就是对每一个人限制流量,然后检查能不能把所有场全部流满 #include <bits/stdc++.h> using namespace std; #define int long 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(9) 评论(0) 推荐(0)
摘要: 高斯消元 #POI #Year2005 考虑对一边的人标 \(1\) 另一边标 \(0\) 考虑对于每一个人,如果这个人当前有奇数个连边,考虑连一条自环,使得它变为偶数个连边 将每个点所有的连接的点的点值 \(xor\) 起来,如果当前为奇数,那么使异或和为 \(1\) 否则为 \(0\) 解出一个 阅读全文
posted @ 2024-04-04 17:07 xiaruize 阅读(7) 评论(0) 推荐(0)