- 博客(605)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 ACM模板
图论: 最短路相关模板 最小生成树模板 网络流模板 二分图匹配模板 强连通分量模板 全局最小割模板 最小树形图模板数据结构: 字典树模板 并查集模板 RMQ(ST)模板 LCA模板 树链剖分模板 块状链表模板 树状数组模板 线段树模板 伸展树模板 treap模板 可持久化并查集 可持久化t
2017-08-26 18:38:41
755
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 博弈论模板
尼姆博弈: 描述:有n堆石子,每堆若干个,两个人轮流从某一堆取任意多石子,规定每次至少取1个,多者不限,最后取光者得胜 结论:对n个石子数进行异或运算,结果不为0,先手胜,否则后手胜#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 110;int main(){ int n;
2017-08-25 11:06:41
607
原创 一切都结束了
2017有幸参加了三场区域赛,icpc沈阳,ccpc秦皇岛,icpc青岛,期间轮流组队,共有五位队友,最终成绩是两铜一铁,沈阳打了铁,另外两场铜。 关于沈阳打铁,我们由于罚时过高,离奖牌差了几名,总结了一下,主要原因是当时我们队由于卡题心态爆炸,无法冷静,导致了不应该的罚时,很遗憾。 秦皇岛ccpc,好像没什么好说的,中规中矩,靠队友带飞拿铜。 青岛的话,大家都知道2017年青岛赛区的题比较坑
2017-11-08 13:15:35
1028
1
原创 可持久化字典树
普通模板://给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少? const int N = 50000 + 10;int son[N*35][2], sum[N*35];int root[N];int tot;int len = 31
2017-10-18 10:26:29
846
原创 扩展kmp
给出两个字符串s1,s2,求出s2的每一个后缀在s1中出现的次数乘以这个后缀的长度,并累加求和,输出这个和//next[i]表示pat与pat[i,len-1]的最长公共前缀//extend[i]表示pat与ori[i,len-1]的最长公共前缀typedef long long ll;const int N = 1000000 + 10, mod = 1e9 + 7;char ori[N]
2017-10-17 20:56:27
512
原创 hdu 5988 Coding Contest 费用流
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=5988题意:有n个区域,有m条有向边连接它们,每条边都有一个被破环的几率,但第一个人通过不会造成任何影响,之后的人通过才会有影响。现在每个区域内有一定的队员和背包,要求每个队员都拿到一个背包,且使道路奔溃的几率最小,求这个最小几率思路:被破坏的几率最小就是不被破坏的几率最大。可以用费用流去做,因为
2017-10-16 18:31:58
430
原创 hdu 6024 Building Shops dp
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6024题意:有n间教室,要选一些建商店,对于每间教室,如果选中在这间教室建商店,会给出一个花费,如果没有选中,那么也有一个花费,就是这间教室到左边最近的商店的距离。要求当一间教室没有建设商店时,那么它左边一定有一个商店。求最小花费思路:根据题意,第一间教室一定要建商店。定义dp[0][i]为第i间教室不建商店
2017-10-16 16:14:59
363
原创 hdu 6031 Innumerable Ancestors lca + 二分
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6031题意:给定一个无向树形图,1为根,对于每次查询,给出两个集合,问两个集合中各选出一个点的最近公共祖先的深度最深为多少思路:用倍增求lca,然后二分枚举答案,求出第一个集合中的点在枚举的深度上的祖先,并标记这些祖先,然后求第二个集合中的点在枚举的深度上的祖先,检查两个集合在枚举深度上的祖先有没有重合,有重
2017-10-16 16:04:04
382
原创 hdu 6029 Graph Theory 思维
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6029题意:有n个点,有下面两种操作从当前点向前面所有点连一条边从当前点不向任何点连边问构成的图是不是一个二分图思路:奇数肯定不能构成二分图,偶数的话,我们依次判断,记录没有配对的点数,当操作1时,查看是否有没有配对的点,有的话,把当前点和某个未配对的点配对,那么未配对点数减1,没有的话,当前点就是一个
2017-10-16 15:17:32
701
原创 hdu 6162 Ch’s gift 树链剖分 + 离线查询
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6162题意:给定一个树形图,有点权,每次一个查询,问从点vv到uu路径上点权在[a,b][a,b]之内的和思路:直接查询好像好像不太行。把每个询问拆成两个:求路径上点权在[0,a−1][0,a-1]内的和sum1sum_1与点权在[0,b][0,b]的和sum2sum_2,那么sum2−sum1sum_2-s
2017-10-16 14:59:46
366
原创 hdu 6178 Monkeys 贪心
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6178题意:有一个树形图,有n个节点,每个节点只能呆一只猴子,现在有k只猴子,要求删掉一些边,在剩余的图中,把这些猴子放置在点上,要求任意一只猴子至少能沿着边访问到另外一只猴子。问最少还剩多少条边思路:可以发现,最少的剩余方式按两个点一条边这样的方式配对。可以用贪心的思想,首先从叶子节点开始配对,求出能配对的
2017-10-16 14:50:53
305
原创 hdu 6180 Schedule 贪心
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6180题意:有n个任务,每个任务有一个开始时间s_i和结束时间e_i,在一些机器上执行任务,每个机器在一段时间间隔内只能执行一个任务,也就是允许时间点是重合的,在一个机器上执行的两个任务之间有段空闲时间的话,机器不能关闭。求最少需要多少台机器,然后求出在这些机器下执行完所以任务需要的最少时间思路:贪心选取,使
2017-10-16 14:22:08
362
原创 hdu 6198 number number number
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6198题意:如果一个数字nn可以等于kk个斐波那契数的和(这些斐波那契数可以相等),那么nn就称为mif−goodmif-good,否则就是mif−badmif-bad,当给定kk时,求最小mif−badmif-bad数字思路:可以推出规律,当k=1k=1时,答案为44,当k=2k=2时,可以发现,当首次遇到
2017-10-16 14:11:18
288
原创 逆元模板
扩展欧几里得求逆元:int extgcd(int a, int b, int &x, int &y){ int d = a; if(b != 0) { d = extgcd(b, a%b, y, x); y -= (a / b) * x; } else x = 1, y = 0; return d;}int mod
2017-10-10 15:43:02
612
原创 欧几里得与扩展欧几里得
欧几里得:int gcd(int a, int b){ return !b ? a : gcd(b, a%b);}int lcm(int a, int b)//最小公倍数{ return a / gcd(a, b) * b;//先除后乘避免溢出}扩展欧几里得:存在整数对(x,y)(x,y)使得ax+by=gcd(a,b)ax+by=gcd(a,b) 推导过程: 用递归求
2017-10-10 14:23:43
331
原创 CodeForces 785E Anton and Permutation 分块
题目:https://vjudge.net/problem/CodeForces-785E题意:给定一个初始为1到n1到n的长度为nn的序列,有mm个操作,每次互换两个数的位置,问每次操作后逆序数有多少对思路:分块。交换x yx\ y,只会影响[x+1,y−1][x+1,y-1]内的元素,然后就可以统计了#include <bits/stdc++.h>using namespace std;typ
2017-10-09 19:57:43
369
原创 codeforces 551E GukiZ and GukiZiana 分块
题目:https://vjudge.net/problem/CodeForces-551E题意:给定一个长度为n的序列a,有两种操作:1 l r x:1\ l\ r\ x:把区间[l,r][l,r]内的元素都加上xx2 y:2\ y:查询整个序列中值为yy的元素的最远距离,若没有yy输出−1-1思路:分块,注意爆int#include <bits/stdc++.h>using namespa
2017-10-09 17:28:15
380
原创 uva12003 Array Transformer 分块
题目:https://vjudge.net/problem/UVA-12003题意:给出一个长度为nn的序列aa,有mm次操作,每次操作(L,R,v,p)(L,R,v,p),首先找出[L,R][L,R]内严格小于vv的元素个数kk,然后把a[p]a[p]更新为u∗k/(R−L+1)u ∗ k/(R − L + 1)。输出最终的序列思路:无脑分块#include <bits/stdc++.h>usin
2017-10-09 15:48:48
317
原创 bzoj2957 楼房重建 分块 || 线段树
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957题意:Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。 为了简化问题,我们考虑这些事件发生在一个二维平面上。小A在平面上(0,0)点的位置,第i栋楼房可以用一条
2017-10-09 15:22:16
345
原创 暂存
约瑟夫环#include <bits/stdc++.h>using namespace std;const int N = 1000 + 10;int main(){ int n, k; scanf("%d%d", &n, &k); int ans = 0; for(int i = 2; i <= n; i++) ans = (ans + k) % i;
2017-10-08 15:18:03
302
原创 一些大数模板
//计算两个大整数的和,要求非负整数void add(char *s, char *s1, char *s2){//s储存结果,s1、s2是两个加数 int len1 = strlen(s1), len2 = strlen(s2); reverse(s1, s1 + len1); reverse(s2, s2 + len2); int t = 0; for
2017-10-07 15:05:16
326
原创 51nod 1097 拼成最小的数 思维
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1097题意:设有n个正整数,将它们联接成一排,组成一个最小的多位整数。例如: n=2时,2个整数32,321连接成的最小整数为:32132, n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355 Input 第1行:1个数N。(2
2017-10-07 13:52:36
357
原创 51nod 1099 任务执行顺序 贪心
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1099题意:有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i])。 例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。
2017-10-07 13:30:58
233
原创 51nod 1267 4个数和为0 二分查找
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267题意:给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出”Yes”,否则输出”No”。 Input 第1行,1个数N,N为数组的长度(4 <= N <= 1000) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10
2017-09-29 16:36:09
287
原创 51nod 1272 最大距离 思维题
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272题意:给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对。每个元素和自己也可以组成一对。例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标): (0,0), (0, 2), (1,
2017-09-29 16:26:23
270
原创 51nod1268 和为K的组合 折半枚举
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1268题意:给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K。如果可以,输出:”Yes”,否则输出”No”。 Input 第1行:2个数N, K, N为数组的长度, K为需要判断的和(2 <= N <= 20,1 <= K <= 10^9) 第2
2017-09-28 22:47:29
260
原创 51nod1770 数数字 思维题
题目:题意:统计一下aaa...aaan个a∗b \underbrace{aaa...aaa}_{n个a}*b 的结果里面有多少个数字d,a,b,d均为一位数。 样例解释: 3333333333*3=9999999999,里面有10个9。Input 多组测试数据。 第一行有一个整数T,表示测试数据的数目。(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有
2017-09-28 22:16:30
372
原创 51nod1393 0和1相等串 思维题
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1393题意:思路:很好的思维题。维护一个前缀和,把0看做-1,一直加,记录每种前缀和首次出现的位置,当再次得到这个前缀和,说明当前位置和首次出现位置之间0和1的个数一定相等,更新答案。因为直接前缀和有负数,无法用数组下标直接记录,所以统一加一个len#include <
2017-09-28 21:30:32
331
原创 可持久化并查集
//n个集合 m个操作 //1 a b 合并a,b所在集合 //2 k 回到第k次操作之后的状态(查询算作操作) //3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 //所给的a,b,k均经过加密,加密方法为x = x xor lastans,lastans是上一次的输出答案//并查集实质是一个数组,可持久化并查集就是一个可持久化数组,可以用可持久化线段树维护,本质就是这样
2017-09-28 15:03:26
427
原创 hash模板
一维hash//求原串中有多少个模式串//Seed[i]是seed的i次幂//hash[j]-hash[i-1] * Seed[len]是区间[i,j]的hash值,len是区间长度typedef long long ll;typedef unsigned long long ull;const int N = 1000000 + 10, M = 10000 + 10, INF = 0x3
2017-09-28 14:38:57
739
原创 分块模板
//有n个数,两种操作:M L R W:对[L,R]内元素都加上W;A L R C:求[L,R]内元素大于等于C的个数const int N = 1e6 + 10;int n, m;int block, sz;int pos[N], L[N], R[N], add[N];//add数组相当于lazy标记int a[N], b[N];void reset(int x){ for(i
2017-09-28 13:53:54
427
原创 莫队算法
普通莫队算法://求线性区间内不同元素的个数const int N = 30010;struct node{ int l, r, id;}q[N*10];int n, m, block, tmp;int ans[N*10], num[N];int a[N], b[N];bool cmp(node a, node b){ return a.l/block != b.l
2017-09-28 12:55:21
390
原创 treap模板
旋转版treap://1. 插入x数//2. 删除x数(若有多个相同的数,因只删除一个)//3. 查询x数的排名(若有多个相同的数,因输出最小的排名)//4. 查询排名为x的数//5. 求x的前驱(前驱定义为小于x,且最大的数)//6. 求x的后继(后继定义为大于x,且最小的数)const int N = 100000 + 10, INF = 2e9 + 10;struct node{
2017-09-28 12:42:18
419
原创 bzoj 3932 [CQOI2015]任务查询系统 主席树
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3932题意:Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行 ),其优先级为Pi。同一
2017-09-27 20:58:38
317
原创 UVA 12538 Version Controlled IDE 可持久化平衡树 || rope
题目:https://vjudge.net/problem/UVA-12538题意:模拟一个版本控制编辑器,有以下操作:1 p s1\ p\ s: 在pp后面位置插入一个字符串ss2 p c2\ p\ c:从第pp个字符开始删掉cc个字符3 v p c3\ v\ p\ c:在第vv个版本中,从第pp个位置开始取cc个字符并输出 前两种操作中每个操作后形成一个新版本。为防止预处理,要求输入中的
2017-09-26 20:39:38
526
原创 rope总结
#include <ext/rope> //所在头文件using namespace __gnu_cxx;//所在命名空间const int N = 10000 + 10;//一般用来处理字符串rope<char> rs;//可以是int之类的类型,但是会有某些方法无法使用//等价于crope rsrs.insert(pos, str);//从pos位置开始插入strrs.erase(po
2017-09-26 15:20:39
1923
原创 hihoCoder1586 Minimum 线段树
题目:http://hihocoder.com/problemset/problem/1586?sid=1197111题意:给定一个序列,有两种操作:1 l r1\ l\ r:从区间[l,r][l,r]内选出数字aia_i, aja_j,是的ai∗aja_i*a_j的值最小2 x y2\ x\ y:把第xx个元素的值更新为y思路:求区间内乘积的最小值,无非以下情况:都是正数时,直接取最小值相乘
2017-09-26 10:42:21
300
原创 hihoCoder1576 子树中的最小权值 dfs序+线段树
题目:http://hihocoder.com/problemset/problem/1576?sid=1197257题意:描述 给定一棵N个节点的树,编号1~N。其中1号节点是根,并且第i个节点的权值是Vi。 针对这棵树,小Hi会询问小Ho一系列问题。每次小Hi会指定一个节点x,询问小Ho以x为根的子树中,最小的权值是多少。为了增加难度,小Hi可能随时改变其中每个节点的权值。 你能帮助小Ho
2017-09-26 10:33:58
373
原创 SPOJ ORDERSET Order statistic set 非旋转treap
题目:https://vjudge.net/problem/SPOJ-ORDERSET题意:有下面四种操作:I x 往集合中插入x,若存在则不操作D x 从集合中删除x,若不存在则不操作K x 求集合中第x大的数,若x大于集合的大小输出invalidC x 统计集合中小于x的数的个数思路:非旋转版treap,主要操作是基于splitsplit和mergemerge#include <bit
2017-09-25 18:13:11
270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人