08 2019 档案
摘要:莫队之集大成者——树上带修改莫队。 首先对树dfs,记下进入和离开一个结点的时间戳$in_u$,$out_u$,并得到相应的长为$2n$的dfs序(常称为括号序),对于一个询问$(u,v)$: 若$lca_{u,v}=u$,则$in_u$到$in_v$之间$(u,v)$路径上的点恰好出现一次,其他点
阅读全文
摘要:显然k条数据线不会交叉。因此可以把问题转化为:从n-1个区间中选择k个,选出的区间不能相邻,最小化区间长度和。 这个贪心和种树是一样的,只不过1和n-1不相邻,两边放上inf值作边界即可。 #include<cstdio> #include<queue> using namespace std; c
阅读全文
摘要:因为$a_i+x,b_i+y$和$a_i+(x-y),b_i$是等价的,所以只需讨论给$a_i$加上一个$[-m,m]$的数即可。 对于题目中的式子: $$\begin{aligned}\sum\limits^n_{i=1}(a_i+x-b_i)^2&=\sum\limits^n_{i=1}(a_i
阅读全文
摘要:这里是点名被卡的$O(qnlogm)$做法 首先考虑对于两个串$s$和$t$,我们怎么合并得到$ans$(两天的总状态): 1. 若存在$s_i$,$t_i$分别为0,1,则返回无解;2. 若$s_i=t_i$,则$ans_i=s_i$(这里涵盖了$s_i=t_i=?$的情况);3. 否则,$s_i
阅读全文
摘要:设答案为$f_u$。 对于叶子结点,$f_u=w_u$。 对于非叶子结点,考虑它的所有儿子$v$,设有$m$个,则只要最小化$\max\limits^m_{i=1}((\sum\limits^{i-1}_{j=1}w_{v_j})+f_{v_i})$,$f_u$即为最小化的答案。 那么如何最小化这个
阅读全文
摘要:首先,种树不外乎三种情况:两头有树、一头有数、两头都没树。这三种情况互不影响,这里只讨论两头有树的情况。 不考虑树的顺序,则根据插板法把问题化归为如下情况:把$n-m$个空位安排到$m-1$个间隔里,要求每个间隔非空。即把$n-m$个元素划分成$m-1$个非空段的方案数。再用一次插板法可知答案为$C
阅读全文
摘要:$m=1$: 直接半平面交即可。 $m=2$: 考虑删掉所有第一名以后再跑一次半平面交,显然未来的第二名一定在求出的凸壳上。但直接赋值是不对的,因为被删掉的第一可能继续占掉第二名的位置让蒟蒻没有活路,因此,用被删掉的直线截凸壳,如果凸壳某段直线存在一个$x$使得它上方只有1条被删去的直线,那么它可以
阅读全文
摘要:一个显而易见的事实是对于$w(S)=1$当且仅当$W\in S$,方案数为$2^{m-1}$,因此接下来就可以只讨论不修改$W$的$2^{m-1}-1$种情况。 那么我们只有两种选择:把$<W$的叶子改成$>W$,让根$>W$;或者把$>W$的叶子改成$<W$,让根$<W$,两种方案互不影响。一个贪
阅读全文
摘要:一个显然结论是每次的期望只和前后最近的已知结果有关。 另一个结论是:若$[x,y]$内$x$次胜负状态为$a$,$y$次为$b$的期望胜利次数为$E$,概率为$P$,则钦定$x$,$y$次分别为$a$,$b$后期望为$\frac{E}{P}$。(这个可以由贝叶斯定理想) 而固定起点的$E_0,E_1
阅读全文
摘要:整体二分经典题。对于一个$mid$,把所有小于$mid$的数染色,检查区间和即可。只是$O(qlog^3n)$需要卡常。二维树状数组是必须的,还有一个小技巧是:把所有数和对应的位置排序后,用一个cur记录一下现在树状数组的状态是1~cur染色过,每次移动cur,这样就省去了清空的复杂度。 #incl
阅读全文
摘要:首先二分$d$,那么要取最小价值,就要在所有满足$d_i\ge d$的$i$中选$p_i$最小的,一路取到$L$。这个东西和名次树很类似,可以在权值线段树上二分。 而快速找到$d_i\ge d$的数据构成的线段树明显是排序+可持久化了。 #include<cstdio> #include<algor
阅读全文
摘要:(持续更新) NIKKEI Programming Contest 2019-2 A: 送分。 #include<cstdio> int main(){ int n; scanf("%d",&n); printf("%d\n",n-1>>1); return 0; } View Code B: 想象
阅读全文
摘要:神仙造计算机题。。。计算机造计算机 subtask 1: 理解了这个题的应该都能写出来。 node 1 read 0 a write a 0 subtask 2: 看到只有一个计算机,内存还只有两个数就明显不能真算了,打表出斐波那契数列,注意要求周期尽量少,所以应该用jmp语句来打表。 1 node
阅读全文
摘要:首先看出$E_i=\frac{\sum\limits^{i-1}_{j=1}\frac{q_iq_j}{(i-j)^2}-\sum\limits^n_{j=i+1}\frac{q_iq_j}{(i-j)^2}}{q_i}=\sum\limits^{i-1}_{j=1}\frac{q_j}{(i-j)
阅读全文
摘要:没有x地图的话是一个比较明显的2-SAT。对于$(i,h_i,j,h_j)$,若$h_i$不能用,则无视掉;若$h_j$不能用,则连边$(i,i')$,表示选$i$就要选$i'$,那么按照2-SAT的定义,$i$肯定不会出现在答案中;否则连边$(i,j),(j',i')$(若$j$不选$h_j$,则
阅读全文
摘要:因为开始每个点颜色不同,染上去的颜色都是新的,由此得出:颜色种数=颜色段数。 然后考虑操作1。它的流程是:从结点x出发,每次跳到同色的链顶端,沿途染色,然后修改链顶的父亲的指向,继续执行,最后得到一条1到x的同色链。 想到了什么?access?没错,用LCT来维护同色点集的话,每次改颜色就是裸的ac
阅读全文
摘要:题意:已知一些数对$(x,y)(0\le x<n,0\le y<k,x+y>0)$,可选可不选,每种选法对答案的贡献是所有$\frac{x}{(k-1)x+y}$之积(一个都没选则为1),求总贡献。 首先提取公因式就可以看出答案是所有$(x,y)$的$(1+\frac{x}{(k-1)x+y})$之
阅读全文
摘要:不会写双向BFS的,死也不会写的 考虑IDA*。一个很naive的h函数是:每个按钮到目标的距离的最大值。于是你花20min就可以拿到40分: #include<cstdio> short s[15],a[15][5],maxd=0,opt[20]; inline bool check(){ for
阅读全文
摘要:想练模拟又不想写猪国杀的话,这题是个不错的练手题比猪国杀好写不止一点点 #include<cstdio> const int dx[8]={1,1,0,-1,-1,-1,0,1}; const int dy[8]={0,1,1,1,0,-1,-1,-1}; struct plane{ int hp,
阅读全文
摘要:(持续更新) Hello 2020 A: 为什么不是天干地支 #include<cstdio> #define For(i,A,B) for(i=A;i<=(B);++i) char s[25][15],t[25][15]; int main(){ int n,m,q,x,i; scanf("%d%
阅读全文
摘要:神仙毒瘤卡常题 首先$O(n\sqrt{n}logn)$的想法不难想到:跑莫队,每次加入一个$a_i$的贡献是$\text{比它小的数个数+1}\times a_i+\text{比它大的数之和}$,删除同理,在值域上跑树状数组即可。 然后你被卡成了暴力 让我们想一下:一个莫队题,插入/删除都是$O(
阅读全文
摘要:一句话题意:给出数列$a_1,a_2,\cdots,a_n$,和$q$个询问$[l,r]$,询问$\frac{\sum\limits^r_{i=l}\sum\limits^r_{j=i}\prod\limits^j_{k=i}a_k}{\frac{(r-l+2)(r-l+1)}{2}}mod1000
阅读全文
摘要:看见神刀手我好像想到了什么。。。 字符串匹配问题。很明显要用字符串哈希,而且发现题目中的$k$很小,考虑把长度小于等于$k$的字串哈希值都暴力存进哈希表哈希套哈希,那么匹配的时候就可以做到接近$O(1)$。 连接和删除时,新增或减少的子串一定跨越断点,也就是一定由前串的后缀和后串的前缀拼成,枚举即可
阅读全文
摘要:由于AC自动机是1975年被发明的,所以这个打字机也可以算是上古科技 首先考察AC自动机的性质我们可以知道,fail指针被发明出来就是为了沿着它跳能跳到所有当前结点代表的字符串的后缀在Trie上对应的结点,所以我们只要统计出y里面有多少个结点跳fail可以跳到x的结尾就可以了。 然而这个东西肯定不能
阅读全文
摘要:首先想一想只有一组询问该怎么做。 菜烂掉比较不好处理,考虑反着来,每天都有菜变多,那么就可以贪心地每天选择收益最高的$m$份菜卖掉。具体实现的话,记录每样菜在什么时候烂光,在相应的一天以$a_i+s_i$的权值插进大根堆里,每次取出堆顶时判断一下,如果当前菜是第一次卖则只卖一个,然后把它以$a_i$
阅读全文
摘要:首先要知道一个结论:已知一个二进制计数器,每次加一,暴力置位,均摊时间是$O(1)$的。 相似地,用会计分析或势能分析可以证明一个更强的结论:每次在计数器某一位上加一,复杂度仍为$O(1)$。所以,设数总长为$L$,若$a$始终不小于零,则我们得到一个$O(Lloga)$的方法。 但这道题要求支持减
阅读全文
摘要:一个显而易见的性质是答案不大于2(角上的跳蚤最多与两个相邻) 继而发现答案其实只可能是-1,0,1,2(废话),分类讨论: -1:$nm-c<2$或者$nm-c=2$且剩下的两只跳蚤相邻; 0:原图不连通; 1:原图联通且有割顶; 否则为2。 但$n,m\le 10^9$这种数据范围肯定不能直接做了
阅读全文
摘要:首先,家和工作单位在同岸的人不用走桥,以下只讨论家和工作单位在对岸的情况,记第$i$个人家在$a_i$,工作单位在$b_i$(具体哪一岸对答案无影响) $k=1$时明显是中位数。 $k=2$时,考虑把这些人分为两组,分别取中位数走就可以了。 可以发现每个人走的距离和$\frac{a_i+b_i}{2
阅读全文
摘要:首先这个$dep[LCA(i,z)]$肯定不能直接求,考虑把它转化,发现$dep[LCA(i,z)]$就等于把$i$到根的路径上的点涂黑后,$z$到根路径上黑点的个数。推而广之,$(l,r,z)$对应的答案就是对于所有$l\le i\le r$的$i$,将$i$到根的路径上的点权值+1后$z$到根的
阅读全文
摘要:首先如果是边权的话很明显是kruskal重构树了,那么类比,点权也可以用类似的方法搞,只不过把枚举边换成了枚举点 然后建两棵树跑树上倍增就可以得出一个点最多可以到达那些点,我们的目标是判断是否存在一个$u$使得$u$到$S$和$E$均联通。 那么考虑把两颗树的$dfs$序求出来,那么问题就变成了已知
阅读全文

浙公网安备 33010602011771号