02 2018 档案
摘要:博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i][i 1] 转移,每次新加两个状态即可 cpp include include include i
阅读全文
摘要:博弈论+区间dp 有博弈论吗?大约只有一个博弈论的壳子 设 dp[i][j] 表示区间 i ~ j 先手最多能取多少, 它可以由 i ~ j 1 与 i + 1 ~ j 来转移, 等于上述两个区间中后手的最大值 + 选的数 cpp include include include include us
阅读全文
摘要:SG搜索 n的范围在可以接受的范围内,SG搜索即可 cpp include include include include include using namespace std; const int MAXN = 1000005; int init() { int rv = 0 , fh = 1;
阅读全文
摘要:Bash Game 看数据范围,这应该是一个 Bash Game ,我们就要寻找平衡点 通过手算找规律,得出平衡点可能是 6 首先我们可以得出 6 的任意倍一定不是质数的幂次,而且不论对方走到质数的多少幂次,总可以用 1 2 3 4 5 来补到最近的 6 的幂次 (完
阅读全文
摘要:博弈论基础 本题可以视作 "P2148 E&D" 的前置技能 本题直接判断奇偶性来求解, 证明就是2148 的证明 不贴代码
阅读全文
摘要:SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来,不能每次算 (WA的原因是 a数组在递归的过程中没有被清空,而是直接覆盖了,如果动态开数组就没有这样
阅读全文
摘要:SG函数的应用 首先每一组都是独立的,所以我们可以求出每一组的SG值异或出来。 那么怎么求每一组的SG值呢,网上的题解都是打表找规律,但其实这个规律是可以证明的 先看规律: x为奇数,y为奇数:SG=0 x为偶数,y为偶数:SG=SG(x/2 , y/2)+1 x为奇数,y为偶数:SG=SG((x+
阅读全文
摘要:SG函数的应用 看到这题就想到了SG函数 那么可以考虑最终情况:一个数是x,另一个是0,那么先手必败(因为上一个人已经得到0了,其实游戏已经结束了) 剩下的情况:一个数n, 一个数m,假设n m 那么根据题意,SG(n,m)=mex{SG(n m, m), SG(n 2m, m), ......,
阅读全文
摘要:齐肯多夫定理: 任何正整数可以表示为若干个不连续的 Fibonacci 数之和。(常用与斐波那契数列有关的博弈) 用数学归纳证明 奇数乘奇数等于奇数 所以 6 一定不是任意质数的幂次 因为 6 不是 2 的幂次, 除了 2 的质数都是奇数
阅读全文
摘要:二维单调队列 先横向跑一边单调队列,记录下每一行长度为n的区间的最值 在纵向跑一边单调队列,得出结果 注意,mi要初始化为一个足够大的数 cpp include include include include using namespace std; int init() { int rv = 0,
阅读全文
摘要:数据结构维护二维平面 首先横着切与竖着切是完全没有关联的, 简单贪心,最大子矩阵的面积一定是最大长 最大宽 此处有三种做法 1.用set来维护,每次插入操作寻找这个点的前驱和后继,并维护一个计数数组,来维护最大值 cpp include include include include include
阅读全文
摘要:线段树维护哈希值 要求出现长度大于三的等差子序列,我们只要找到长度等于三的就可以了 初看本题没有思路,只能暴力枚举,O(n^4) 后来发现,这个序列是n的一个排列,那么每个数字都只会出现一次 我们可以维护一个 $01$ 序列 B ,表示某个数字是否出现过, 然后我们从左往右枚举等差中项x并将该项在B
阅读全文
摘要:主席树可以存储线段树的历史状态,空间消耗很大,一般开45n即可 cpp include include include include include include define lson l, mid define rson mid+1, r define ll long long using
阅读全文
摘要:离线扫描线+查分+线段树 我们发现,这个题的询问都是离线的,所以我们尝试用离线扫描线的方法来处理 对于每一次操作,我们维护一个差分数组, 在询问的时候,我们用一根扫描线,从左往右扫,并用线段树维护,每种礼物的次数, 每扫到一个人,先处理在这个人处的操作,然后查询最大值即可 cpp include i
阅读全文
摘要:题目描述 你有一个长度为 $n$ 的数列 $\{a_n\}$ ,这个数列由 $0,1$ 组成,进行 $m$ 个的操作: $1\ l\ r$ :把数列区间$ [l,r]$ 内的所有数取反。即 $0$ 变成 $1$ ,$1$ 变成 $0$ 。 $2\ l\ r$ :询问数列在区间 $[l, r]$ 内共
阅读全文
摘要:最大权闭合子图,神题 这不是线性代数,这是网络流。 我们看见这是一堆矩阵的运算,而且最后变成了一个数,那么我们就想到,把这个矩阵乘法的过程用具体的数字推出来 我们发现,a是一个01矩阵,然后其实就可以化成这么一个问题: 有n个东西,选了i,j两件东西能得到b[i,j]的价值,然而选i需要c[i]的花
阅读全文
摘要:类似筛法的思想 本题实际上就是反推hash的模数, 首先想到枚举k,但显然会超时。 $a mod k==b mod k k|(a b) $ 由同余的定义可以知道 所以我们的任务就变成的找到一个整数k使其不是任意一个 $ a b $ 的因子, 观察一下数据范围可以发现,我们可以预处理出所有的a b,并
阅读全文
摘要:树的直径 树的直径求法: 1. 任取一点u,找到树上距u最远的点s 2. 找到树上距s点最远的点t,s t的距离即为所求 cpp include include include include include include include using namespace std; int init
阅读全文
摘要:树上差分 对于一条路径 $u v$ 来说,设 $t=LCA(u,v)$ ,d[]为差分数组 ,则有 d[u]++;d[v]++;d[t] ;d[fa[t]] ; 注意:题目中所给的路径上的点都多计算了一次,统计答案时要减去 cpp include include include include us
阅读全文
摘要:树剖求LCA 我们可以发现,两条路径ab,cd相交,当且仅当 dep[lca(a,b)] =dep[lca(c,d)]&(lca(lca(a,b),c)==lca(a,b)||lca(lca(a,b),d)==lca(a,b))或把abcd交换一下即可 cpp include include inc
阅读全文
摘要:树剖 将一个软件是否安装,看作是sum数组的0或1,对于每个操作前后sum[1]的变化,就是所求 cpp include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(
阅读全文
摘要:树剖+线段树维护连续相同区间个数 注意什么时候长度要减一 cpp include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma)
阅读全文
摘要:迷之TLE cpp include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma){ ma=siz[v]; son[u]=v;
阅读全文
摘要:支持各种数据结构上树,注意取膜. cpp include include include include include include define lson l,mid,rt'9'){ if(c==' ') fh= 1; c=getchar(); } while(c ='0'&&cma){ ma
阅读全文

浙公网安备 33010602011771号