随笔分类 - 基础—脑洞
摘要:首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 当前合并两块合并到第i个和第j个,如果i和j都是块的开头就一定不会构成逆序对,因为双指针的时候会直
阅读全文
摘要:首先看这个范围很夸张但是其实有限制的也就在1e18\ n范围里(走完一圈的边权),然后限制一定是有负环 用Floyd传递闭包,然后设f[i][j][k]为从1走了i步到j并且有k个x的最短路,用B F处理,然后有负环就是kx+f[n][i][k] include include include in
阅读全文
摘要:一开始没看到要保证最后是树……所以一定要从叶子开始删 枚举重心,如果k是偶数,那么按当前重心提起来deep大于k/2的全都要切掉,这样枚举重心然后取min即可 奇数的话就是枚举直径中间的边,然后从两边的点分别dfs删点 cpp include include using namespace std;
阅读全文
摘要:传送:https://dmoj.ca/problem/ioi17p3 参考:https://blog.csdn.net/qq_27327327/article/details/80711824 妙啊……首先题意就是走到一个包含充电点的环里就能赢 因为出度至少是1,所以如果所有点都能到充电点那么全部是
阅读全文
摘要:脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走一圈在差分数组上的贡献是一个位置+4一个位置 4, 然后对于差分c后值为( 3,3)的一对位置,+4
阅读全文
摘要:A题意:给定字符串s,求无重复字符子序列个数(子序列相同位置不同算不同) 在最后加一串a~z表示选了这些就是不选这个字符了,然后答案就是每次选每个字符位置的方案数的积 cpp include include using namespace std; const int N=100005,mod=1e
阅读全文
摘要:真实脑洞题 因为通配符所以导致t串实际有指数级别个,任何字符串相关算法都没有用 考虑一个新的匹配方法:设a串(模板串)长为n,从m串的i位置开始匹配:\\( \sum_{i=0}^{n 1}(a[j] b[i+j])^2a[j] \\) 这个东西只有在从i开始的长为n的a串子串与b串完全匹配的时候才
阅读全文
摘要:人言水能载舟行远航
亦能翻云覆雨作恶浪
阅读全文
摘要:一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们可以在这个抵消后的数的范围内随意操作,也就是任意取值
阅读全文
摘要:首先考虑快排的递归什么时候停下,显然是当前段只剩下一个数了,也就是一个数两边出现分隔符 然后再考虑计算冒泡长度这个操作,因为有分割,所以我们可以把这些放到一起冒泡,这和递归每个区间冒泡是等价的 所以答案就是一个数被动了几次,也就是他两边的分隔符出现的最晚时间 在冒泡排序中,每次冒泡,一个数如果前面有
阅读全文
摘要:这题加个 include都会MLE…… 神思路,每个数抵消宇哥和它不同的数,最后剩下的就是众数 cpp include int n,la,x,tot; int main() { scanf("%d",&n); for(int i=1;i
阅读全文

浙公网安备 33010602011771号