摘要: BCD code 题解 "传送门" AC当然可以,由于数据非常小,可以使用更暴力的字符串$dp$方法,本质相同 注意到所有的数位$dp$ , 都是从首位开始加数字的 , 那么在每一次加入过后 , 若这段后缀字符串已经与某个字符串相同 , 这个状态一定不会继续 而它的后缀与某一字符串相同的条件 , 一 阅读全文
posted @ 2019-07-28 16:16 chasedeath 阅读(180) 评论(0) 推荐(0) 编辑
摘要: CF715C Digit Tree 树上$DSU$做法详解 首先 , $DSU$原理应该不必多说 , 即取重儿子 , 将轻儿子合并 统计答案时 , 我们将以 当前所在点$u$ 为$LCA$的点答案进行统计 但是,这题用 \(DSU\) 做的难点在于储存权值 我们先暂且不考虑取模 $DSU$因为需要从 阅读全文
posted @ 2019-07-28 16:14 chasedeath 阅读(716) 评论(0) 推荐(0) 编辑
摘要: ZOJ - 2112 \(\ \) (那些说这道题是树状数组套主席树的人一定对主席树有误解!) 这里我们用树状数组套线段树来解决来写 首先 , 我们需要有n棵线段树(不是$n^2$空间,别慌) 我们用这些线段树存储值域$ [l,r] $内数的个数 基于主席树的思想,我们的线段树是要相减的,记录的是前 阅读全文
posted @ 2019-07-28 16:07 chasedeath 阅读(218) 评论(0) 推荐(0) 编辑
摘要: Count On A Tree 建立线段树记录每个$[1,u]\(路径上的前缀中在值域\)[L,R]$中的个数 查询时 计算 \(cnt[x]+cnt[y]-cnt[lca]-cnt[fa[lca]]\) const int N=1e5+10,P=1e9+7; int n,m; int s[N*20 阅读全文
posted @ 2019-07-28 16:06 chasedeath 阅读(180) 评论(0) 推荐(0) 编辑
摘要: Trie(字典树) 基本数据结构 实际是:对于每个字符串组的每一个不同前缀建立节点 基本代码 void Insert(char *s,int p){ int now=0; int l=strlen(s); rep(i,0,l-1){ int k=s[i]-'a'; if(!nxt[now][k]) 阅读全文
posted @ 2019-07-28 16:00 chasedeath 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 题解并不是特别详细 , 代码可能会有细节问题 ,题目排列比较诡异 方法总结: 一、列出暴力dp的式子 用$dp[i]=dp[j]....$ 二、找出里面的量,通常分三种: 1只与$i$有关 2.只与$j$有关的 3.对于同时与$i,j$有关的 三、固定 $i$ ,对于$x,y$属于$j$的范围且 $ 阅读全文
posted @ 2019-07-28 14:04 chasedeath 阅读(395) 评论(2) 推荐(0) 编辑
摘要: [BZOJ1098][POI2007]办公楼biu 一个看上去非常玄学的代码 我这个代码大概是在讲这样的: 按照出度排序,没有连边的点必须合并,最后找集合个数 但是合并的时候要注意用y的答案更新x,这样y就不用再跑一次了~~(这里的总复杂度较为诡异)~~ 更新过程:遍历x的边,如果y的边中没有x的这 阅读全文
posted @ 2019-07-28 13:58 chasedeath 阅读(166) 评论(0) 推荐(0) 编辑
摘要: [POI2008]PER-Permutation 带重复的康托展开! 根本不需要中国剩余定理就可以A掉! 看完题面你会惊人地发现这好像一个康托展开!(显然是不同的啦) 首先我们来看康托展开这个东西在数组为排列时怎么打 >度娘 int cantor(int a[],int n){//cantor展开, 阅读全文
posted @ 2019-07-28 13:57 chasedeath 阅读(185) 评论(0) 推荐(0) 编辑