摘要:
博弈论+dp+概率 "提交链接" 题意不是很好懂 Ai 表示剩 i 个石头、 A 先手的获胜概率。 Bi 表示剩 i 个石头、 B先手的获胜概率。 如果想选,对于 Ai: 有 p 的概率进入 Bi−1 ;有 1−p 的概率进入 Bi 所以 fi=p∗Bi−1+(1−p)∗Bi 如果想选,对于 Bi: 阅读全文
摘要:
博弈论+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; 阅读全文
摘要:
SG函数的应用 看到这题就想到了SG函数 那么可以考虑最终情况:一个数是x,另一个是0,那么先手必败(因为上一个人已经得到0了,其实游戏已经结束了) 剩下的情况:一个数n, 一个数m,假设n m 那么根据题意,SG(n,m)=mex{SG(n m, m), SG(n 2m, m), ......, 阅读全文
摘要:
二维单调队列 先横向跑一边单调队列,记录下每一行长度为n的区间的最值 在纵向跑一边单调队列,得出结果 注意,mi要初始化为一个足够大的数 cpp include include include include using namespace std; int init() { int rv = 0, 阅读全文
摘要:
数据结构维护二维平面 首先横着切与竖着切是完全没有关联的, 简单贪心,最大子矩阵的面积一定是最大长 最大宽 此处有三种做法 1.用set来维护,每次插入操作寻找这个点的前驱和后继,并维护一个计数数组,来维护最大值 cpp include include include include include 阅读全文
摘要:
主席树可以存储线段树的历史状态,空间消耗很大,一般开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 阅读全文
摘要:
类似筛法的思想 本题实际上就是反推hash的模数, 首先想到枚举k,但显然会超时。 $a mod k==b mod k k|(a b) $ 由同余的定义可以知道 所以我们的任务就变成的找到一个整数k使其不是任意一个 $ a b $ 的因子, 观察一下数据范围可以发现,我们可以预处理出所有的a b,并 阅读全文