摘要: 题意: 给定一个序列,问最小能划分成几段,每段元素>=l个并且max-min<=s 题解: 这种一看就是dp[i]表示dp到第i位划分了几段,然后dp[i]=max{dp[j]+1} 考虑这样的max-min是从右向左递增的,所以可以二分 然后得到 j 的左右边界,线段树维护 1 #include< 阅读全文
posted @ 2019-02-28 01:15 幽蝶 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 题意: 给一棵树,每个点有个权值,求最大权值-最小权值<=d的连通块个数 题解: 枚举最大权值点作为根,可以算出最小权值最小是多少,然后树形dp,每次合并两个连通块dp[u]=dp[u]+dp[u]*dp[v] (原来的方案数+加入新连通块的方案数) 树形dp中大于最大或者小于最小显然就不考虑了; 阅读全文
posted @ 2019-02-28 00:12 幽蝶 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题意: 给一棵树,每次询问给两个点u,v,求到这两个点距离相等的点的个数。(n,q<=1e5) 题解: 简单题,考虑u,v所在链,如果奇数条边显然ans=0; 偶数条边则这两个点的中点x符合条件,考虑链外还有什么点符合条件:中点x连着的其他子树中的点; 倍增+分类讨论一波; 坑点:u==v时的情况 阅读全文
posted @ 2019-02-27 22:50 幽蝶 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 最近补了一发多项式相关的知识点,记录一下放个板子 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define maxn 100005 4 using namespace std; 5 const int mod = 998244353; 6 阅读全文
posted @ 2019-02-25 22:35 幽蝶 阅读(117) 评论(0) 推荐(0) 编辑
摘要: A. 考虑前一半异或和等于后一半可以转化为子串异或和为0 然后就做个前缀和,统计奇偶相同的有多少前缀和相同 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define maxn 300005 4 using namespace std; 5 阅读全文
posted @ 2019-02-19 17:17 幽蝶 阅读(129) 评论(0) 推荐(0) 编辑
摘要: A. 题解:快速幂 1 #include<bits/stdc++.h> 2 #define ll long long 3 #define maxn 100005 4 using namespace std; 5 const ll mod=2; 6 ll b,k; 7 ll a[maxn]; 8 ll 阅读全文
posted @ 2019-02-10 09:50 幽蝶 阅读(163) 评论(0) 推荐(0) 编辑
摘要: A. 题解:枚举答案,验证 代码: B. 题解:考虑到每个长度为k的串的字母相同,用two-pointers维护出现次数,然后在长度为k字母相同的串结尾位置标记val=1,最后对每种字母DP就行 C. 题解:简单计数DP,按 mod 3 分类。 D. 题解:开p个队列,每次从可扩展点开始bfs就行 阅读全文
posted @ 2019-01-21 08:35 幽蝶 阅读(150) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-09-15 18:10 幽蝶 阅读(439) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-09-09 23:00 幽蝶 阅读(223) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2018-09-09 22:32 幽蝶 阅读(212) 评论(0) 推荐(0) 编辑