随笔分类 -  7.————其他————

摘要:就是求连通块的数量,可以维护一个斜着的扫描线,set里只保留在R范围内的点 然而怎么维护连通块呢。。 其实只需要向能够到的最靠左和最靠右的点连边就可以,剩下的点之前就已经连好了 阅读全文
posted @ 2019-05-02 17:29 Ressed 阅读(273) 评论(0) 推荐(0)
摘要:考虑颜色比较少的时候,第一问可以直接斯坦纳树 第二问考虑二分,每次把每格的权值给成1000+[a[i]>m],就是在个数最少的基础上尽量选小于等于m的 然而颜色太多不能直接做,但可以把每种颜色映射到5以内,这样的话,做一次的正确率就是作为答案的那5种颜色分别被映射到了1~5的概率,就是$\frac{ 阅读全文
posted @ 2019-03-28 11:00 Ressed 阅读(263) 评论(0) 推荐(0)
摘要:考虑到蚂蚁们的相对位置不会变化,而且,如果把“相遇后掉头”看作是“相遇后交换编号”的话,也可以得出来最后都有哪些位置有蚂蚁 然后,只要确定哪个位置是“1”就可以了 然后搞一个指针p代表原来第一个位置的蚂蚁现在的位置(相对于0来说的),每当有蚂蚁穿过0位置,p就根据穿过的方向加加减减就可以了 阅读全文
posted @ 2019-03-23 19:46 Ressed 阅读(246) 评论(0) 推荐(0)
摘要:题意:有两数a,b,每次你可以给定c,d询问a xor c和b xor d的大小关系,最多询问62次($a,b<=2^{30}$),问a和b 考虑从高位往低位做,正在做第i位,已经知道了a和b的前i-1位 这样的话,只要让a、c,b、d的前i-1位相同,就和前i-1位没关系了 考虑在第i位上abcd 阅读全文
posted @ 2018-12-08 20:55 Ressed 阅读(311) 评论(0) 推荐(0)
摘要:题意:给一个数列,你可以进行至多n+1次操作,每次给一个前缀对某数取模或者加某数,使得最后数列严格单增 考虑到因为是前缀和而且还不能加负数,光靠加是不能让前面的小于后面的 所以要让他先在模某数意义下单增,最后再模一下 先钦定好mod,然后从后往前做,这时候a[i]已经定下来,只要给前i个加上某数使得 阅读全文
posted @ 2018-12-08 20:41 Ressed 阅读(311) 评论(0) 推荐(0)
摘要:首先整体二分,问题变成是否存在经过一个点的满足条件的路径 那么我对于每个路径(a,b,lca),在树状数组的dfn[a]++,dfn[b]++,dfn[lca]--,dfn[fa[lca]--] 然后直接查那个点的子树和就行了 阅读全文
posted @ 2018-12-01 19:01 Ressed 阅读(178) 评论(0) 推荐(0)
摘要:考虑整体二分,问题就变成了每个(水果)路径有多少个满足条件(权值)的(盘子)子路径 考虑一个盘子(a,b)表示两端点(不妨设dfn[a]<dfn[b]),那么他能接到的水果(u,v)一定满足(不妨设dfn[u]<dfn[v]): 1.如果a是b的祖先,则u在(a的在(b,a)链上的孩子)这个子树外, 阅读全文
posted @ 2018-12-01 18:42 Ressed 阅读(184) 评论(0) 推荐(0)
摘要:考虑如果只有距离为1的边,那我用在时间i到达某个点的状态数矩阵 乘上转移矩阵(就是边的邻接矩阵),就能得到i+1时间的 然后又考虑到边权只有1~9,那可以把边拆成只有距离为1的 具体做法是一个点拆成9个然后串联 阅读全文
posted @ 2018-11-27 19:49 Ressed 阅读(188) 评论(0) 推荐(0)
摘要:对于加减,用bitset维护当前每个数有没有 对于乘,暴力枚举约数 然后莫队 复杂度$O(m(\sqrt{n}+\frac{c}{64}))$ 阅读全文
posted @ 2018-11-27 19:29 Ressed 阅读(165) 评论(0) 推荐(0)
摘要:好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i$个城池所需要最小的初始生命值 设trans[x][i][0/1]是攻克了$2^i$个城池后攻击力的 阅读全文
posted @ 2018-11-26 21:15 Ressed 阅读(192) 评论(0) 推荐(0)
摘要:设f[i]是以i位置为结尾的最长满足条件子序列的长度 那么j能转移到i的条件是,$j<i , max[j]<=a[i] , a[j]<=min[i]$,其中max和min表示这个位置能变化出来的最大值或最小值 这个东西用一个cdq来做 具体来说,先做左半区间,然后左边按max排序,右边按a排序,把左 阅读全文
posted @ 2018-11-21 19:35 Ressed 阅读(348) 评论(0) 推荐(0)
摘要:首先二分一下答案,就变成了找长度>=m的 不相交的路径的个数 考虑到在一个子树中,只有一个点能出这个子树去和别的点搞 所以我这个子树里尽量自我满足是不会有坏处的 而且要在自我满足数最大的条件下,剩下一个尽量大的去把他搞出去 具体来说,我们设f[x]是x的子树中的满足条件的最大路径数,g[x]是在f[ 阅读全文
posted @ 2018-11-19 11:18 Ressed 阅读(266) 评论(0) 推荐(0)
摘要:和NOIp2013 积木大赛一模一样 我在堆一格的时候,我把它尽量地往右去延伸 于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1] 如果a[i-1]>=a[i],那i肯定都堆过了 阅读全文
posted @ 2018-11-19 10:53 Ressed 阅读(191) 评论(0) 推荐(0)
摘要:考虑某两行a和b的dis 如果相同:$|a-b|$ 如果不同:$n-|a-b|$ 然后考虑三行的dis,不妨设a>=b>=c 那么有4种情况: 1.a,b,c 0/1的种类相同:$|a-b|+|a-c|+|b-c|=2a-2c$ 2.a和b相同:$2n+2c-2b$ 3.a和c相同:$2n$ 4.b 阅读全文
posted @ 2018-11-16 09:48 Ressed 阅读(340) 评论(0) 推荐(0)
摘要:可以直接套动态dp,但因为它询问之间相互独立,所以可以直接倍增记x转移到fa[x]的矩阵 阅读全文
posted @ 2018-11-16 08:32 Ressed 阅读(182) 评论(0) 推荐(0)
摘要:先跑一边dijkstra算出从1到i的最短距离dis[i] 然后建反向边 从n开始记忆化搜索,(p,k)表示1到p的距离=dis[p]+k的方案数 答案就是$\sum\limits_{i=0}^{k}{(n,i)}$ 考虑0环,如果我记搜的时候搜到了0环,那答案就是-1,可以先用tarjan处理一下 阅读全文
posted @ 2018-11-02 16:35 Ressed 阅读(560) 评论(0) 推荐(0)
摘要:传送门 sbw太神啦orz 首先N<=20可以直接暴搜 然后玄学剪枝可以过18个点 那么N<=40的时候,就把它拆成两半分别暴搜,再用dp拼起来 对于前半段,设f[i][j]是开始高度为i,获得金币为j的方案数;对于后半段,设g[i][j]是结束高度为i,获得金币为j的方案数(离散化一下高度) 然而 阅读全文
posted @ 2018-11-01 09:08 Ressed 阅读(135) 评论(0) 推荐(0)
摘要:首先如果L=1,那就可以直接用一个优先队列来做 但它并不是1 所以要换个做法 假设我们已经知道第L的数是x,第R的数是y 那其实就只需要找到[x+1,y+1]这一段,然后再加上一定数量的x和y就是答案 于是可以枚举A[i],二分B[j]找到 然后考虑怎么找第L的数是多少 其实也是二分出一个数,然后比 阅读全文
posted @ 2018-10-29 21:22 Ressed 阅读(230) 评论(0) 推荐(0)
摘要:用一个树状数组维护前缀和,每次我二分地找一个位置,使得我能一路买过去 但这个买不了 那以后肯定也都买不了了,就把它改成0,再从头二分地找下一个位置,直到这一圈我可以跑下来 然后就看跑这一圈要花多少钱、能买多少糖,拿T除一除,减一减,再去跑下一圈 每个位置只会被删一次,所以复杂度是$O(nlog^2n 阅读全文
posted @ 2018-10-27 22:23 Ressed 阅读(242) 评论(0) 推荐(0)
摘要:考虑如果数字范围没有这么大的话,直接做一个差分数组就可以了 但现在变大了 所以要用一个map来维护 阅读全文
posted @ 2018-10-27 20:58 Ressed 阅读(281) 评论(0) 推荐(0)