题目: 题解: 暴力一波 \(SG\) 函数可以发现这么一个规律: \(p\) 为奇数的时候 : \(SG(n) = n \% 2\) \(p\) 为偶数的时候 : \(SG(n) = n \% (p+1) == p ? 2 : n \% (p+1) \% 2\) 对于奇数的情况我们就可以直接用一棵支持区间取反和区间查询 \(1\) 的个数的线段树搞定. 那么难点在于偶数的情况. 我们可以采用分块算法. 每个块分别中保存 \(\bmod (p+1)\) 为奇数的数和为偶数的数. 然后每次查询的时…
题目: 题解: 我们可以发现所有的交换器都是一个位置连接着下一层左侧的排序网络,另一个位置连着另一侧的排序网络. 而下一层是由两个更低阶的排序网络构成的. 两个网络互不干扰.所以我们可以通过第一行和最后一行列出多个2-SAT的约束限制. 所以我们可以在每一次都跑一边2-SAT来决策出最外层的交换器是否开启. 然后我们就可以发现每次2-SAT都一定有解,也就是说不可能出现无解的情况. 用2-SAT保证字典序最小即可. #include <cstdio> #include <cstring&…
link: https://loj.ac/problem/6142 推完一波式子之后发现求的是:ΣC(N,i)^2, 其中i是偶数. 然后就可以卢卡斯乱搞了,分奇偶和之前的答案合并就好了233. #include<bits/stdc++.h> #define ll long long #define maxn 1000010 #define ha 1000003 using namespace std; ll n; int num[10],len; int f[2],pre[2],inv[ma…
这个就比较简单了~ Code: #include <cstdio> #include <algorithm> #define N 100004 #define inf 1000000000 #define setIO(s) freopen(s".in","r",stdin) // , freopen(s".out","w",stdout) using namespace std; int n,edges…
模拟赛的题 好神仙啊 题面在这里 之前的Solution很蠢 现在已经update.... 题意 有$ n$个商品价格均为$ 1$,您有$ m$种面值的货币,面值为$ C_1..C_m$ 每种物品你有$ P$的概率选取,然后你需要选出若干货币购买这些物品 购买商品不存在找零,求浪费在找零上的钱的期望对$ 1e9+7$取模 $ n \leq 10^9 \ m \leq 10^2 \ C_iC_j \leq 10^4$ $Solution $ 垃圾模数毁我青春 首先考虑$ m=1$怎么做 枚举购买的…
题解: 当奇数 发现答案就是C(n,1)^2+C(n,3)^2+...C(n,n)^2 倒序相加,发现就是C(2n,n) 所以答案就是C(2n,n)/2 当偶数 好像并不会证 打表出来可以得到 2.当n为偶数且为4的倍数时,答案为C(2n,n)+C(n,n/2)/2 3.当n为偶数且不为4的倍数时,答案为C(2n,n)-C(n,n/2)/2 另外Claris告诉我在p较小时可以数位dp来求 先用lucas定理 C(n,m)=C(n%p,m%p)*C(n/p,m/p) 然后我们就可以把n表示成p进…
题目描述 给你一棵 $n$ 个点的树,边有边权.$m$ 次询问,每次给出 $l$ .$r$ .$x$ ,求 $\text{Min}_{i=l}^r\text{dis}(i,x)$ . $n,m\le 10^5$ . 题解 动态点分治+线段树 分块做法太傻逼了我们把它丢到垃圾桶里.树上距离考虑动态点分治. 求出这棵树的点分树,对每一棵点分树子树开一棵动态开点编号线段树,维护编号在某区间内的点到当前点距离的最大值. 对于一次查询,我们在点分树从 $x$ 到根的路径上所有点对应的线段树上查询 $[l,…
一棵带边权的树,多次询问 $x$ 到编号为 $[l,r]$ 的点最短距离是多少 $n \leq 100000$ sol: 动态点分治,每层重心维护到所有点的距离 查询的时候在管辖这个点的 log 层线段树里查就可以了 因为这样每一层的答案只会漏而不会错,所以正确性有保障 不会写点分治了...orz #include <bits/stdc++.h> #define LL long long #define rep(i, s, t) for (register int i = (s), i##en…
\(\color{#0066ff}{题目描述}\) JOHNKRAM 最近在参加 C_SUNSHINE 举办的聚会. C 国一共有 n 座城市,这些城市由 n−1 条无向道路连接.任意两座城市之间有且仅有一条路径.C_SUNSHINE 会在编号在 [1,n] 内的城市举办聚会. 为了整整 JOHNKRAM,C_SUNSHINE 把他丢在了城市 x,让他自己走到一座城市去参加聚会.JOHNKRAM 希望你能帮他计算,他最少要走多长的路才能到达一座正在聚会的城市? 当然,C_SUNSHINE 一共举…
「2017 山东三轮集训 Day7」Easy 练习一下动态点分 每个点开一个线段树维护子树到它的距离 然后随便查询一下就可以了 注意线段树开大点... Code: #include <cstdio> #include <cctype> #include <algorithm> using std::min; template <class T> void read(T &x) { x=0;char c=getchar(); while(!isdigi…