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

摘要:先把区间按照长度从小到大排序,然后用尺取法来做 大概就是先一点一点把区间算上 直到某个点被覆盖了m次,然后一点一点把最前面的区间扔掉,直到没有点被覆盖m次,这样反复做(相当于是它选择的区间左右端点在那里摩擦) 判断有没有点被覆盖m次可以用线段树来做 阅读全文
posted @ 2018-10-26 19:12 Ressed 阅读(133) 评论(0) 推荐(0)
摘要:分析1的个数的奇偶性: 奇xor奇=偶xor偶=偶 奇xor偶=奇 所以只要统计1的个数是奇数的数的个数 和 是偶数的个数 乘一起就行了 直接用bitset来做,虽然常数很小/数据随机可以过,但复杂度是$O(nlogv)$的 其实可以把一个数拆成前16位和后16位,先预处理出来$2^{16}$个数的 阅读全文
posted @ 2018-10-22 22:14 Ressed 阅读(176) 评论(0) 推荐(0)
摘要:为了节省能量,我们会希望一个已经烧开了的水温度越低越好 那么可以得到结论,它要依次去碰当前温度从大到小的水 然后再把温度最高的烧开呗 可是直接模拟会T 稍微写一写大概能找到每次烧开花费能量的一个规律 但我哪找得出来啊 知道了以后也不会证 阅读全文
posted @ 2018-10-22 21:47 Ressed 阅读(192) 评论(0) 推荐(0)
摘要:Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 阅读全文
posted @ 2018-10-19 14:58 Ressed 阅读(152) 评论(0) 推荐(0)
摘要:如果把“我全都要”看作是我全不要的话,就可以用最小割解决啦 源点S,汇点T 我们试图让每个市民作为一个等待被割断的路径 把狗狗给市民:建边(S,i,1),其中i是市民 把狗狗给守卫:建边(j,T,1),其中j是守卫(也就是边) 市民要在路上所有边看到狗:建边(i,j,1),其中i是市民,j是i经过的 阅读全文
posted @ 2018-10-18 20:23 Ressed 阅读(673) 评论(0) 推荐(0)
摘要:一定是从随便某个点开始,然后按着dfs序的顺序跑一圈是最好的 所以说,新加一个点x,就减少了dis(pre,next),增加了dis(pre,x),dis(x,nxt) 删掉一个点同理 这个可以用set维护 阅读全文
posted @ 2018-10-18 17:02 Ressed 阅读(199) 评论(0) 推荐(0)
摘要:首先可以求出从某点做$2^k$次车能到的最浅的点,这个只要dfs一下,把它的孩子能到的最浅的点更新过来就可以 然后倍增地往上跳,不能跳到lca的上面,记录坐车的次数ans 此时有三种情况(设最远能跳到x,y): 1.再跳也跳不到lca的上面,就是-1 2.路径(x,y)被某趟车覆盖,答案是ans+1 阅读全文
posted @ 2018-10-18 16:47 Ressed 阅读(823) 评论(0) 推荐(0)
摘要:先用线段树处理出推倒某一个后能覆盖到的最右端的位置R(绝对不能是最右边的那个骨牌,因为有可能右面的很短,左面的巨长(R不随L单调),后面算花费又需要用到这个位置),之后可以花费R到第一个比R大的左端点来跳到下一个骨牌 然后可以倍增处理出跳多少次能跳到哪个骨牌,统计答案即可 阅读全文
posted @ 2018-10-18 16:22 Ressed 阅读(198) 评论(0) 推荐(0)
摘要:按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有就是inf呗) 这样的话,对于x,如果dis[x]<=2或者dis[fa[x]]<=1或者dis[f 阅读全文
posted @ 2018-10-18 16:06 Ressed 阅读(137) 评论(0) 推荐(0)
摘要:首先大概有一个树剖+树套树的做法,但我哪会写啊 然后发现k很小,如果用线段树记每个区间前k大的的话,可以O(k)地合并 而且一个点还有可能有好多个骑士,所以要用multiset维护一下 然后树剖就好啦 阅读全文
posted @ 2018-10-15 21:03 Ressed 阅读(251) 评论(0) 推荐(0)
摘要:给一些字符 求它们能拼成的字符串 的回文子串的个数最大值 对应的那个字符串 就是把相同的都放一起是最优的,排下序就行了... 阅读全文
posted @ 2018-10-15 20:56 Ressed 阅读(125) 评论(0) 推荐(0)
摘要:可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时 然后判一判,bfs就好了 dfs会T惨... 阅读全文
posted @ 2018-10-15 20:53 Ressed 阅读(191) 评论(0) 推荐(0)
摘要:如果给相同的位置连边,最后联通块数是n,最后答案就是$9*10^{n-1}$ 但直接连边是$O(n^2)$的 所以事先处理出一个ST表,每次O(1)地给那个ST表连边 最后再一点一点下放,就是把在这层的同一集合的的左儿子连到一个里,右儿子连到一个里 统计最下面那一层的联通块数量就行了 阅读全文
posted @ 2018-10-13 11:13 Ressed 阅读(220) 评论(0) 推荐(0)
摘要:因为只能带一个,买卖价格又一样,所以只要右边的比左边的大,就从这买下来然后带到下一个卖掉就行了(我想到别处再卖的话大不了再重新买回来嘛) 所以给max(w[i]-w[i-1],0)维护一个前缀和就行了 阅读全文
posted @ 2018-10-13 11:09 Ressed 阅读(253) 评论(0) 推荐(0)
摘要:一个JSB做法 由$\frac{x*b0}{gcd(x,b0)}=b1$,可得$\frac{x}{gcd(x,b0)}=\frac{b1}{b0}$ 设$b2=\frac{b1}{b0}$ 所以对$b2$和$b0$分解质因数,可以得到结论: 1.x必须包含b2中所有的质因数,且个数等于它在b2和b0 阅读全文
posted @ 2018-10-13 11:01 Ressed 阅读(170) 评论(0) 推荐(0)
摘要:首先想到建出可持久化trie树然后在上面贪心,但是它加了一个数所以不能这么做 但依然可以贪心,仿照上面那个的过程,如果设y是在第i位上^b是1的数(前面的位数已经贪好了),我只要在[l,r]范围内能有[y-x,y+(1<<i)-x-1)]的数,那这位异或出来就是可以是1的 阅读全文
posted @ 2018-10-13 10:42 Ressed 阅读(74) 评论(0) 推荐(0)
摘要:首先floyd求出来每两点间的最短距离,然后再求出来从某点买再到某点卖的最大收益 问题就变成了找到一个和的比值最大的环 所以做分数规划,二分出来那个答案r,把边权变成w[i]-r*l[i],再做spfa判正环就行了 (本来想偷懒用floyd判正环,结果T了) 阅读全文
posted @ 2018-10-13 10:33 Ressed 阅读(243) 评论(0) 推荐(0)
摘要:易证我们走的时候只会从某一层的某端点走向另一端点、然后走向下一层的某端点.. 所以建图然后dijkstra就行了 调了一年以后发现dijkstra写错了 阅读全文
posted @ 2018-10-13 10:26 Ressed 阅读(448) 评论(0) 推荐(0)
摘要:首先二维树状数组肯定开不下 仿照二维树状数组的做法,如果有差分数组$d[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1]$,那么就有: $$sum[x][y]=\sum\limits_{i=1}^{x}{\sum\limits_{j=1}^{y}{\sum\ 阅读全文
posted @ 2018-10-12 14:17 Ressed 阅读(231) 评论(0) 推荐(0)
摘要:贪心地,可以建出一棵树,每个区间对应一个点,它的父亲是它右边的、与它不相交的、右端点最小的区间。 为了方便,再加入一个[0,0]区间 于是就可以倍增来做出从某个区间开始,一直到某个右界,这之中最多能选多少区间 这样的话,可以从[0,0]区间,倍增做出第一问的答案 考虑第二问,我们需要尽量选编号小的区 阅读全文
posted @ 2018-10-09 12:50 Ressed 阅读(193) 评论(0) 推荐(0)