09 2018 档案
摘要:题目大意:有n(n\leqslant10^5)种物品,第i个物品体积为v_i,都有10^5件。给定m(m\leqslant10^5),对于s\in [1,m],请你回答用这些商品恰好装s体积的方案数 题解:(by Weng_weijie) 背包问题模板(误) 对每个物品构
阅读全文
摘要:题目大意:给出n-1次多项式A(x),求一个 \bmod{x^n}下的多项式B(x),满足B(x) \equiv e^{A(x)}。 题解:(by Weng_weijie) 泰勒展开:$$f(x)=f(x_0)+\dfrac{f'(x_0)(x-x_0)}{1!}+\dfrac{
阅读全文
摘要:题目大意:给你一个集合n,m,x,S(S_i\in(0,m],m\leqslant 8000,m\in \rm{prime},n\leqslant10^9),求一个长度为n的序列Q,满足Q_i\in S,且\prod\limits _{i=1}^nQ_i=x,求序列的个数 题解:
阅读全文
摘要:题目大意:有一个小偷,拿k个东西,有n种产品,每种产品都有无限多个。对于每个第i 种产品,它的价值是A_i。可能偷走的物品价值之和。 题解:对于所有的物品构造生成函数F(x)=\sum\limits_{i\in A}x^i,取k个物品相当于取其中的k项相乘,输出$F^k(
阅读全文
摘要:题目大意:给出n-1次多项式A(x),求一个 \bmod{x^n}下的多项式B(x),满足B(x) \equiv \ln A(x)。在\bmod{998244353}下进行。保证A[0]=1 题解:$$B(x)=\ln A(x)\\B'(x)=\dfrac{A'(x)}{
阅读全文
摘要:题目大意:求n个点的带标号的无向连通图的个数 题解:令F(x)为带标号无向连通图个数生成函数,G(x)为带标号无向图个数生成函数 那么G(x) = \sum_{i=0}^{\infty} \dfrac{2^{i(i-1)/2}}{i!} x^i 枚举连通块个数可得$G(x)=\sum
阅读全文
摘要:题目大意:对于一棵随机生成的n个结点的有根二叉树,所有不同构的形态等概率出现(这里同构当且仅当两棵二叉树根相同,并且相同节点的左儿子和右儿子都相同),求叶子节点个数的期望是多少? 题解:令f_n表示n个节点的二叉树的个数,g_n表示这f_n棵二叉树的叶子节点个数和。 打(ti)表
阅读全文
摘要:题目大意:一个长度为n的字符串,要求把它分成尽可能多的小块,使得这些块构成回文串 题解:贪心,从两边从找尽可能小的块使得左右的块相等,判断相等可以用hash 卡点:无 C++ Code:
阅读全文
摘要:题目大意:有n根竹竿,第i根竹竿在i位置,第i根竹竿高度为h_i,每根竹竿可以向左倒或向右倒,问有几对竹竿倒下后顶端重合。 题解:求出每根竹竿倒下后的位置,离散化,记录一下每个点出现次数就行了 卡点:没开long\;long C++ Code:
阅读全文
摘要:题目大意:有n个元素,第i个元素有三个属性a_i,b_i,c_i,设f(i)=\sum\limits_{i\not = j}[a_j\leqslant a_i,b_j\leqslant b_i,c_j\leqslant c_i],令$d(i)=\sum\limits_{j=1}^n[
阅读全文
摘要:题目大意:有n个位置,有三种数,每个位置只可以填一种数,d(d\leqslant8)个位置有三种选择,其他位置只有两种选择。有一些限制,表示第i个位置选了某种数,那么第j个位置就只能选规定的数 输出一组合法的选数方案,无解输出-1 题解:考虑d=0的情况,就是2-sat的
阅读全文
摘要:题目大意:给你一张n个点m条边的无向图,求一条1->n的路径,使得经过路径值的异或值最大(重复经过重复计算) 题解:某条路k被重复走了两次,那么它的权值对答案的贡献就是0,但是通过这条路径k,可以到达它连接的另一个点。 可以将路径拆成两部分,一部分是环,另一部分是链。假设我们
阅读全文
摘要:题目大意:有n盏灯,m个开关(n,m\leqslant 50),每个开关可以控制的灯用一串OX串表示,O表示可以控制(即按一下,灯的状态改变),X表示不可以控制,问有多少种灯的亮暗状态 题解:线性基,线性基有一个性质,插入的数的任意一个集合的异或值都不同,所以若插入了k个
阅读全文
摘要:题目大意:给定n个数,选取任意个数,使得他们的异或和最大。 题解:线性基,原理贪心看不懂。 对于每一个数,设它的最高位的1在第i位,如果此时P_i为空,就将这个数加入线性基,否则异或上P_i继续找。最后贪心看ans异或上线性基的这一位会不会变大,若变大就转移 卡点:无 C++
阅读全文
摘要:题目大意:有T(1\leqslant T\leqslant 10)组数据,每组数据给你A,B,C(0<A,B,C\leqslant 10^7),求$\sum\limits_{i=1}^A\sum\limits_{j=1}^B\sum\limits_{k=1}^C\varphi((i,j^2,
阅读全文
摘要:题目大意:有n个小时,有m个节目(每种节目都有类型0/1),有k个人,一个人连续看相同类型的节目会扣w快乐值。 每一种节目有都一个播放区间[l,r]。每个人同一时间只能看一个节目,第i个节目只能一个人看,看完可以获得快乐val_i。问最多可以获得多少快乐? 题解:最大
阅读全文
摘要:题目大意:T(T\leqslant 10^5)组数据,每组数据给你n(n\leqslant 2\times 10^7),求\sum\limits_{i=1}^n\sum\limits_{j=1}^{i-1}[(i+j,i-j)==1] 题解:$$\def\dsum{\displaysty
阅读全文
摘要:题目大意:给定n个A类元素和m个B类元素,每类元素有值S和k个值x_0,x_1,\dots,x_{k-1}(k\leqslant 5)。 要求选出一个A类元素a和B类元素b,最大化$a.S+b.S+\sum\limits_{i=0}^{k-1}|a.x_i
阅读全文
摘要:题目大意:给你n,一种合法的排列为,排列中没有s[i\%n+1]-s[i]==1,求合法方案数 题解:容斥,令f_{i,j}表示有i个元素,至少包含j个s[i\%n+1]-s[i]==1的方案数,发现f_{n,1}=\binom n 1(n-2)!个 推广$f_{n,k}
阅读全文
摘要:题目大意:给一张无向图,求三元组(u,v,w)满足u->v->w为简单路径,求个数 题解:圆方树,缩点后DP,因为同一个点双中的点一定地位相同 卡点:1.father数组开小,一不小心就续到了下面的bool的vis数组中,然后就挂成98,因为发现去掉没用的vis数组变
阅读全文
摘要:题目大意:一个有向图称为半连通的,当且仅当对于任意两点u,v,都满足u能到达v或者v能到达u。给一张有向图,问该图最大半连通子图的节点个数及方案数。 题解:发现任意一个强连通分量显然都是半连通子图。把它们都缩成一个点。形成一个DAG,问题就转化为了找最长链长度及方案数。$DP
阅读全文
摘要:题目大意:给一棵树,有四种操作: 题解:LCT乱搞 卡点:无 C++ Code:
阅读全文
摘要:题目大意:基本同上一题[bzoj5329][Sdoi2018]战略游戏,只是每个点集内只有两个点,且只有一组询问而已。(双倍经验?我反正就直接改了一下代码就交了) 题解:同上一题(链接见“题目大意”) 卡点:无 C++ Code: #include <cstdio> #include <cstrin
阅读全文
摘要:题目大意:多组数据,每组数据给一张图,多组询问,每个询问给一个点集,要求删除一个点,使得至少点集中的两个点互不连通,输出方案数 题解:圆方树,发现使得两个点不连通的方案数就是它们路径上的圆点个数。如何处理重复?可以按圆方树的dfn序排序,相邻两点求一下贡献,这样贡献就被重复计算了两次,除去k
阅读全文
摘要:题目大意:有2^n个人,每相邻的两个人比赛一次。令两个人的编号为a,b(a\leqslant b),若a\neq 1,则a的人获胜;否则若b\in S则b获胜,不然1获胜。钦定1获胜,问可以的开始的顺序的方案数 题解:状压DP,令开始的第i位的人的编号为$p_
阅读全文
摘要:题目大意:给定一个字符串,求一个最短的串要求没有在该字符串的子串中出现过,如果有多个,输出字典序最小的那一个。 题解:倒着跑一遍原字符串(以下编号为1\sim n),按出现了所有26个字母来分段,把完整的段从左到右编号,第i段为[l_i,r_i],答案的长度就是分成的完整的段+1
阅读全文
摘要:题目大意:有一个n\times m的01矩阵,可以把任意行或列反转,问最大的全为一的子矩阵的面积 题解:有一个结论:若一个子矩形S中的任意一个2\times 2的子矩形都含有偶数个1,则存在一种操作使得S中全为1。 就令四个点亦或值为0的格子(有偶数个1)的左上角
阅读全文
摘要:题目大意:有一个n位的数,设第i位为a_i(最高位为a_1)。问满足(\sum\limits_{i=2}^n(a_i-a_{i-1}))==k的数的个数(不含前导零) 题解:发现$(\sum\limits_{i=2}^n(a_i-a_{i-1}))==k\Leftrightarr
阅读全文
摘要:题目大意:有4n个硬币,放在2n个位置(即放成两排),有两个人,轮流取。第一个人取上面的,第二个人取下面的,每个人只可以取两个人都没取过的位置。若硬币正面向上,为1,反面为0。把取得的硬币按取得顺序排成一列,这个二进制数大的人赢,为有没有先手必胜策略。 题解:贪心,一定是先取正面向上
阅读全文
摘要:题目大意:给你一个长度为2n的括号序列,保证n个`(`,n个`)`。要求输出一种可行方案,通过小于等于n的步数,每次交换区间[x_i,y_i](立即交换),使得最后括号序列合法 题解:找到第一个`)`和最后一个`(`,交换 卡点:看成读入后一起交换 C++ Code:
阅读全文
摘要:题目大意:给一棵n个节点的树,每个点有一个值C_i,每次询问一条路径x->y,求\sum\limits_{c}val_c\times \sum\limits_{i=1}^{cnt_c}worth_i(cnt_c=\sum\limits_{i\in(x->y)}[C_i==c])。带修
阅读全文
摘要:题目大意:有一棵n个节点的树,第i个点有一个颜色C_i,m组询问,每次问x->y的路径上有多少种颜色 题解:树上莫队,把树按欧拉序展开成一条链,令第i个节点第一次出现在序列中为in_i,第二次为out_i,每一个询问就是看in_x->in_y中只出现一次的节点的颜
阅读全文
摘要:题目大意:给一串长度为n的数字,求出其中最长的至少出现k(2\leqslant k\leqslant n)次的字段,输出长度 题解:SAM后DP 卡点:多处数组未开两倍 C++ Code:
阅读全文
摘要:题目大意:给你n,m,p(p \in \rm prime),求出C_{n + m}^m\bmod p(可能p\leqslant n,m) 题解:卢卡斯Lucas定理,C_B^A\bmod p等于把A,B写成p进制时每一位的组合数相乘,设$A=a_n\times p^n+a_{
阅读全文
摘要:题目大意:给你一个长度为n的序列,要求出长度大于等于len的字段的中位数中最大的一个中位数 题解:可以二分答案,对于比它小的数赋成-1,大的赋成1。求前缀和,若有一段区间的和大于0,说明这个数可以作为中位数。因为长度要大于等于len,所以可强制长度大于等于len。 如何求
阅读全文
摘要:题目大意:有n个数,有m个操作,有三种: (线段树2就是先读入n\;m\;p,再读入序列;本题是先读入n\;p,读入序列,再读入m,双倍经验) 题解:线段树,把lazy\_tag变成两个,分别记录区间加和区间乘,注意乘法的优先级比加法高 卡点:无(我以前写的是什么代码啊?)C
阅读全文
摘要:题目大意:有n个点,每个点有一个距离(从小到大给出),从第i个点跳一次,会跳到距离第i个点第k远的点上(若有两个点都是第k远,就跳到编号小的上)。问对于从每个点开始跳,跳m次,最后会到哪个点 题解:难点主要在处理第k远上(跳只需要一个类似快速幂的东西就好了,也就是倍增)。
阅读全文
摘要:题目大意:给定一个n个点m条边有向图,第i个点有权值w_i,求一条路径,使路径经过的点权值之和最大,输出点权和,(多次经过一个点只算一次点权) 题解:tarjan缩点+DP 卡点:1.多处i,j打错 2.要求找到一条路径,看成了终点必须为n C++ Code:
阅读全文
摘要:题目大意:有一棵树,第i个点的点权为s_i(s_1>0)。初始有每个点都是亮的。m次修改,每次改变一个点的亮暗,回答包含1的全亮的连通块中点权和最大的连通块的和的值。题解:正解不怎么会(我只打了一遍代码),这里是97分代码(复杂度O(n^2log_2n),暴力复杂度$O(n^
阅读全文
摘要:题目大意:有两个序列a和b,每个分别有n(n\leqslant10^4)个元素,序列a中的数为0\sim n-1的一个排列。T_i为(a_i+b_i)\bmod n或者(a_i-b_i)\bmod n。要求使得$\displaystyle\bigcup\limits_
阅读全文
摘要:题目大意:有一张n个点,m条边的无向图,第i条边有权值a_i,b_i,求一条1到n的路径,使得这条路径上\max\{a_i\}+\max\{b_i\}最小 题解:先想到二分,然而两个权值,有没有关键字先后顺序的二分我并不会。。。 然后发现,可以先按a_i把每条边排序,
阅读全文
摘要:题目大意:有n个数,两个操作 题解:把每个p\leqslant \sqrt n的答案预处理出来,复杂度O(n\sqrt n)。对于p>\sqrt n的询问怎么办呢?暴力算,复杂度是O(n\dfrac{n}{p}),因为p>\sqrt n,所以$\dfrac n p <\sqr
阅读全文
摘要:题目大意:有n支画笔,有两个操作 题解:带修莫队,分为n^{\frac{1}{3}}个块,每个块n^{\frac{2}{3}}个元素,复杂度O(n^{\frac{5}{3}}) 卡点:读入时,修改的时间赋值错 C++ Code:
阅读全文
摘要:题目大意:有n个任务,第i个任务存在于[l_i,r_i],优先级为p_i,m个询问,每个问在x_i时刻时,优先级最小的k个的优先级的和是多少。 题解:离散化优先级,前缀和主席树即可 卡点:1~4.数组开小一倍,root数组未连续 C++ Code:
阅读全文
摘要:题目大意:三合一,给你y,z,p,求x,三种询问 题解:求快速幂,逆元和BSGS(离散对数)BSGS就是用分块的思想,令m=\lceil \sqrt p\rceil,因为y^{i\times m+j}=y^{i\times m}\times y^j所以可以预处理y^i(用
阅读全文
摘要:题目大意:有一段数列,有两个操作 题解:线段树,记录区间最大前缀,最大后缀,区间和以及区间的答案卡点:1.题目说可能a\geqslant bC++ Code:
阅读全文