上一页 1 ··· 48 49 50 51 52 53 54 55 56 ··· 65 下一页
摘要: 设f[i]为在i放置守卫塔时1~i的最小花费。那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]。 显然这是个斜率优化入门题。将不与i、j同时相关的提出,得f[i]=min(f[j]+j*(j+1)/2-ij)+i*(i-1)/2+a[i]。 套路地,假设j>k且j转移优 阅读全文
posted @ 2018-09-17 23:01 Gloid 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 最小割树:新建一个图,包含原图的所有点,初始没有边。任取两点跑最小割,给两点连上权值为最小割的边,之后对于两个割集分别做同样的操作。最后会形成一棵树,树上两点间路径的最小值即为两点最小割。证明一点都不会。 那么这个题就很好做了,连树都不用建。 阅读全文
posted @ 2018-09-17 21:57 Gloid 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 考虑差分序列。每个差分序列的贡献是n-差分序列的和,即枚举首项。将式子拆开即可得到n*mk-1-Σi*cnt(i),cnt(i)为i在所有差分序列中的出现次数之和。显然每一个数出现次数是相同的,所以cnt(i)即等于(k-1)*mk-2。于是就很好算了。 阅读全文
posted @ 2018-09-17 21:11 Gloid 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 必修五题。 阅读全文
posted @ 2018-09-17 16:13 Gloid 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 考虑异或最短路应该怎么求。那么这是个WC原题,dfs一遍找到所有有用的环丢进线性基即可,因为每一个环的权值都是可以取到且不对其他部分产生影响的。 现在给了一棵树,不妨就把他看做原图的dfs树。每增加一条边就是增加了一个环。算出权值后,现在问题变为求一个数和任选一段区间里的数的最大异或值。 比较暴力的 阅读全文
posted @ 2018-09-17 12:27 Gloid 阅读(503) 评论(0) 推荐(0) 编辑
摘要: A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() { int 阅读全文
posted @ 2018-09-16 22:39 Gloid 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 显然1的位置确定了整个矩阵,每一段连续的数即是对该位置的限制。化一下式子可以发现是一段区间或一段区间的补集,最后要求的是他们的交。看起来不太好求,于是转为求补集的并,那么排个序就完了。 阅读全文
posted @ 2018-09-16 18:33 Gloid 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 11……1(n个)=99……9(n个)/9=(10n-1)/9。 那么显然就是求离散对数了,BSGS即可。 阅读全文
posted @ 2018-09-16 17:12 Gloid 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 由于n!是m!的倍数,而对于每个与m!互质且小于m!的数x,x+m!、x+2*m!……也与其互质,所以答案即为(n!/m!)*φ(m!)。 φ(m!)=m!*∏(1-1/pi)。其中的pi即为1~m中所有质数。那么这个前缀积就可以预处理了。 当n、m大于p的时候是可能有问题的,数据里没有就懒得讨论了 阅读全文
posted @ 2018-09-16 16:14 Gloid 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 注意到等级的变化最多有nm次。于是考虑比较暴力的做法,线段树维护每个区间内每个等级角色的最大经验值,区间加时看有没有可以升级的,如果有则暴力向两边递归,否则打上标记。复杂度O(nmlogn)。 似乎有更优的做法。 阅读全文
posted @ 2018-09-15 17:13 Gloid 阅读(148) 评论(0) 推荐(0) 编辑
上一页 1 ··· 48 49 50 51 52 53 54 55 56 ··· 65 下一页