题目描述 Alice 和 Bob 现在在玩的游戏,主角是依次编号为 1 到 n 的 n 枚硬币.每一枚硬币都有两面,我们分别称之为正面和反面.一开始的时候,有些硬币是正面向上的,有些是反面朝上的.Alice 和 Bob 将轮流对这些硬币进行翻转操作,且Alice 总是先手. 具体来说每次玩家可以选择一枚编号为 x,要求这枚硬币此刻是反面朝上的.对于编号 x 来说,我们总可以将 x 写成 $ \cdot 2^a \cdot 3^b$ ,其中 a 和 b 是非负整数,c 是与 2,3 都互质的非负整
做了 [JSOI2008]Blue Mary开公司 以后发现这 tm 不就是个傻逼树剖+李超线段树吗,做了以后发现我才是傻逼--树剖竟然写错了--这题是我目前写过最长的代码了qwq #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int n, m, uu, vv, ww, dep[100005], fa[100005], dfn[100005], son[100005]
题解 终于了解怎么动态维护虚树了 就是把点按照dfs序排个序啊 这道题显然是求虚树上所有边长的两倍 我们把dfs序排完序,相邻两个点加上路径长(包括首尾),删除的时候删一个点减去它到两边再加上新近相邻的两个点即可 增加同理 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define space putchar(' ') #define enter p
题解 简单分析一下就知道\(\lfloor \frac{N}{i} \rfloor\)相同的\(i\)的\(sg\)函数相同 所以我们只要算\(\sqrt{n}\)个\(sg\)函数就好 算每一个\(sg(m)\)的时候我们可以通过把这个数再拆成\(\sqrt{m}\)段来计算\(sg\)值 复杂度用积分分析是\(n^{frac{3}{4}}\) 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii