随笔分类 - hdu
摘要:题意:给你一张带权有向图,问你某个点集中,两两结点之间的最短路的最小值是多少。 其实就是dijkstra,只不过往堆里塞边的时候,要注意塞进去它是从集合中的哪个起始点过来的,然后在更新某个点的答案的时候,如果它是集合中的点,除了最开始入堆的那次以外,要再更新一遍,并且不能用从本身过来的路径进行更新。
阅读全文
摘要:题意:网格图。给你一个格点多边形的面积,问你最少用多少条边(可以是单位线段或单位对角线),围出这么大的图形。 如果我们得到了用n条边围出的图形的最大面积f(n),那么二分一下就是答案。 n为偶数时,显然要尽量用斜边去拼矩形,于是f(i)=i*i/4-1 (i mod 4 == 2),f(i)=i*i
阅读全文
摘要:题意:给你一张带权有向图,让你求最大树形图。并在此前提下令n号结点父亲的编号最小。 比赛的时候套了个二分,TLE了。 实际上可以给每个边的权值乘1000,对于n号结点的父边,加上(999-父结点编号)大小的权值,这样即可保证最大树形图的前提下,n号结点父亲的编号最小。 网上找了个朱-刘算法的板子,把
阅读全文
摘要:题意:给你一颗树,每个结点的儿子数不超过2。每个结点有一个权值,一个结点的代价被定义为将其子树中所有结点的权值放入数组排序后,每个权值乘以其下标的和。让你计算所有结点的代价。 二叉树的条件没有用到。 每个结点开一个Splay,从叶子往上启发式合并上去,可以先bfs一遍确定合并顺序。每一次将Splay
阅读全文
摘要:两个等长字符串A,B的距离被定义为 给你一个字符串,问你对于所有长度相等的不相交子串对,其距离不超过m的前提下,最长的长度是多少。 枚举对称轴,两侧先贪心地扩展到最长,超过m之后,再缩短靠近对称轴的端点,如此反复进行,每次更新答案的时候,都用的是当前“近对称轴端点”固定时的最长值。 复杂度O(n^2
阅读全文
摘要:平面上n个点,每个点带权,任意两点间都有连线,连线的权值为两端点权值之积。没有两点连线过原点。让你画一条过原点直线,把平面分成两部分,使得直线穿过的连线的权值和最大。 就把点极角排序后,扫过去,一侧的点会跨过直线与另一侧的所有点形成连线。此时的答案为两侧的权值和之积,尝试用此更新最终答案。
阅读全文
摘要:给你n,K,让你构造出一颗n个结点的完全K叉树,求所有结点子树大小的异或和。 先把n号结点到根的路径提取出来单独计算。然后这条路径把每一层分成了左右两部分,每一层的左侧和其上一层的右侧的结点的子树大小相同。 就可以容易计算每种大小的子树个数了。 当K等于1时,要单独讨论,答案为1 xor 2 xor
阅读全文
摘要:给你一个中心在原点的圆,再给你俩在圆内且到原点距离相等的点P,Q,让你在圆上求一点D,最小化DP+DQ。 http://blog.csdn.net/qq_34845082/article/details/77099332 附:过反演中心的圆反演后变成一条和该圆正交的直线。 不过反演中心的圆反演后是一
阅读全文
摘要:给你数列a,问你对它作m次求前缀异或和之后的新数列是什么。 考虑a1对最终生成的数列的每一位的贡献,仅仅考虑奇偶性, 当m为2的幂次的时候,恰好是这样的 2^0 1 1 1 1 1 ... 2^1 1 0 1 0 1... 2^2 1 3个0 1 3个0 ... 2^3 1 7个0 1 7个0 ..
阅读全文
摘要:给你n个点,让你连m条边,使得任意两两点对之间的最短路的和最小(两点若不可达,最短路记作n)。 初始时ans=n*n*(n-1)。 先尽量连成菊花图,每连一次让答案减小2*((n-2)*(i-1)+(n-1)),i为当前菊花图中的点数。 连完后剩下的边,每连一次让答案减小2。 如果已经用了n*(n-
阅读全文
摘要:给你m个01串,问你有多少个长度为2L的01串,满足前半段倒置取反后等于后半段,并且包含所有的m个01串。 考虑单词完全在中线前面或者后面的情况,直接将单词及其倒置取反插入AC自动机,AC自动机每个结点用个tag压位记录单词集合。 对于跨越中线的情况,比如说110010是一个单词,枚举一个中线, 1
阅读全文
摘要:给你数组A和B,A B中的元素大小都不超过5w,且两两不同。 q次询问,每次给你个k,问你有多少对(i,j),满足A(i)%B(j)==k。 如题目所言模拟bitset的过程,实质上是个分块,每块的大小定为63。 一个小技巧是对于最终的那个数组w,分块后记63个w数组,每个数组最前面一块是零散的部分
阅读全文
摘要:给你一个4个点的环,问你从2号点出发, 再回到2号点,长度>=K的最短路是多少。环上的边长度不超过30000。 跑出来所有dis(2,j)以后,然后for一遍j,根据dis(2,j)+t*2*w>=K,解出来对于每个j而言最小的t,然后尝试更新答案即可。如果dis(2,j)已经大于等于K了,那直接用
阅读全文
摘要:size(l,r)表示区间l,r权值的种类数,让你求min{size(l,r)/(r-l+1)}(1<=l<=r<=n)。 last[r]表示a[r]上一次出现的位置, 就是二分验证mid的时候,先把线段树的每个位置i置成mid*i,然后再枚举右端点r,对[last[r]+1,r]作区间+1,然后c
阅读全文
摘要:d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7)
阅读全文
摘要:划分出来的每个区间的答案,其实就是连续两个的lca的最小值。 即5 2 3 4 这个区间的答案是min(dep(lca(5,2)),dep(lca(2,3),dep(lca(3,4))))。 于是dp即可,f(i,j)表示前i个数,划分成j段的最优值。 只有三种决策,要么不取,继承f(i-1,j),
阅读全文
摘要:f(l,r,K)表示区间l,r里面的K大值,问你所有连续子区间的f之和。 l(i)表示i左侧第一个比它大的数的位置,r(i)表示i右侧第一个比它大的数的位置。可以用set处理出来。 把数从大到小排序,依次插入。然后更新l(i),r(i),形成链形结构。 然后对于一个i,向左跳最多K次,将这些位置记录
阅读全文
摘要:非常棒的题解,我就不复述了:http://blog.csdn.net/Bahuia/article/details/76141574 O(n)
阅读全文
摘要:把b数组的所有置换群求出来,用数组记录一下每个大小所出现的次数。 然后求a的置换群,对每个置换群求能被其整除的b的置换群的大小总和(只有这些才能满足构造出一个f,且不自相矛盾),然后把它们全都乘起来就是答案。
阅读全文

浙公网安备 33010602011771号
