07 2019 档案

摘要:题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示当前走到了第几位,是否有上限,是否有前导零的状态,则问题转化成了求所有转移路径中经过的所有数字的数量 阅读全文
posted @ 2019-07-31 19:25 jrltx 阅读(424) 评论(0) 推荐(0)
摘要:题意:求[L,R]中差值最小和最大的相邻素数(区间长度不超过1e6)。 由于非素数$n$必然能被一个不超过$\sqrt n$的素数筛掉,因此首先筛出$[1,\sqrt R]$中的全部素数,然后用这些素数去筛$[L,R]$。 注意1不是素数,但不会被筛掉,需要特殊处理(巨坑~~) 阅读全文
posted @ 2019-07-30 16:24 jrltx 阅读(227) 评论(0) 推荐(0)
摘要:紫薯例题 阅读全文
posted @ 2019-07-30 09:59 jrltx 阅读(232) 评论(0) 推荐(0)
摘要:题意:给定一个n个点m条边的有向图,每条边有个长度,可以花费等同于其长度的代价将其破坏掉,求最小的花费使得从1到n的最短路变长。 解法:先用dijkstra求出以1为源点的最短路,并建立最短路图(只保留d[v]=d[u]+e[i].c的边(u,v)),跑个最大流即可。 Dinic: 1 #inclu 阅读全文
posted @ 2019-07-29 10:31 jrltx 阅读(319) 评论(0) 推荐(0)
摘要:题意:有一个序列,一开始所有的元素都是ai,你可以选择两个长度相等的区间,如果某个元素被一个区间覆盖,那么变为bi,如果被两个区间都覆盖,那么变为ci。问所有区间的选择方法中产生的第k小的元素总和。 首先很容易想到的是二分答案,枚举一个区间,然后用线段树或树状数组查询另一个区间使得元素总和小于等于答 阅读全文
posted @ 2019-07-29 09:57 jrltx 阅读(301) 评论(0) 推荐(0)
摘要:后缀数组: 后缀自动机: 阅读全文
posted @ 2019-07-22 17:13 jrltx 阅读(168) 评论(0) 推荐(0)
摘要:题目链接 题意:一个马在无限大的棋盘中跳,问跳n步能跳到多少个不同的格子。 首先写个打表程序打一下n比较小的时候的表: 打印结果: 把元素差分两次后,成了这个亚子: 发现了什么?当n比较大的时候,经过二次差分后的数组的每一项都是28!因此可以猜测答案是一个关于n的二次多项式,现在要做的是把这个多项式 阅读全文
posted @ 2019-07-13 21:04 jrltx 阅读(379) 评论(0) 推荐(1)
摘要:维护一个01序列,一共四种操作: 1.插入一个数 2.删除一个数 3.反转一个区间 4.查询两个后缀的LCP 用Splay或者Treap都可以做,维护哈希值,二分求LCP即可。 注意反转序列的时候序列的哈希值也会改变,因此需要维护正反两个哈希值,在交换左右儿子的时候顺便交换两个哈希值即可。 还有就是 阅读全文
posted @ 2019-07-08 17:30 jrltx 阅读(208) 评论(0) 推荐(0)