自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 Codeforces Round #430 (Div. 2) D. Vitya and Strange Lesson(01Trie)

题意:给你一个数组,m次操作,每次操作给你个x,把所有数亦或x,每次操作后输出数组的mex值,mex值表示第一个未出现的自然数。思路:1.异或的效果是可以累加的,所以每次操作的x亦或可以叠加起来成X,这样每次操作就是对原数组亦或X。我们一开始把原数组不存在的数插入到01Trie,现在对原数组进行一次异或操作,则异或之后的a数组的mex值就是 插入的数组(未出现的值)xo

2017-08-31 15:29:07 395

原创 HDU 5738 Eureka (共线点集 组合数)

题意:给你n个点,要求一个点集中所有点共线(可有重点)。问有多少的这样的集合。思路:1. 先将所有点排个序,这样可以保证向量都是非负的,去除相反向量带来的影响。2. 用gcd的方式将向量的值最小化,使相同向量的唯一性。3. 枚举每个点进行单独讨论,统计这一个点对总答案的贡献度。(计算贡献时用到这:cn0+cn1+cn2+cn3+…+cnn=2^n)代码:

2017-08-31 12:45:06 337

原创 CodeForces 165E Compatible Numbers (dp)

题意:给你n个数,让你找到一个任意a[j]使得 a[j] & a[i] == 0,不存在输出-1。思路:我们可以知道a[i]&(M^a[i])一定为0,(M为二进制全为1),当然a[i]不仅仅只和M^a[i]与运算后为0,M^a[i]的二进制中还有许多位为1,那么这些变为0,也是可以作为答案的。所以可以dp递推处理,见代码。代码:#includeusing names

2017-08-30 17:31:29 298

原创 Codeforces Round #430 (Div. 2) C. Ilya And The Tree(dfs)

题意:给你一棵树,根节点是1,每个节点都有一个权值,现在要求出每个节点的结果,结果的定义为从根节点到该节点(包含)路径上所有点的值的gcd,求解每个点时可以把路径上某一个点的值变为0。每个节点的结果独立计算。思路:可以直接进行dfs,每个节点有set分别保存它到根节点不取每一个点的gcd,比如路径为1 - 2 - 3 - 4,4号节点保存的set是gcd(a[1], a[2],

2017-08-30 11:08:46 513

原创 BZOJ 3261 最大异或和 && qwb VS 去污棒(可持久化01Trie)

Problem I: qwb VS 去污棒 Time Limit: 2 Sec Memory Limit: 256 MB Submit: 95 Solved: 36 [Submit][Status][Web Board] Descriptionqwb表白学姐失败后,郁郁寡欢,整天坐在太阳底下赏月。在外人看来,他每天自言自语,其实他在和自己的影子“去污棒”聊天。 去污棒和

2017-08-29 22:42:28 538

原创 HDU 5887 Herbs Gathering (超大01背包|dfs+剪枝|map|卡时)

题意:最多100个物品,v和w都思路:是个超大01背包。这题有好多做法,学到不少东西。1.dfs+剪枝:我们可以按性价比排序,若剩下的背包空间都以最高性价比选也比我们已知的ans小,则剪枝。2.map优化dp,见代码3.按一定贪心策略把更可能是答案的放前面排序后dfs,运行时间达到一定程度则returnif((clock()-startTime)/CLOCKS_PE

2017-08-28 18:06:26 705

原创 2017 Multi-University Training Contest 10 1001 Admiral HDU 6171 (双向搜索 哈希)

题意: 给你一个高度为6的塔形数组,你每次只能将0与他上下相邻的某个数交换,问最少交换多少次可以变为初始状态,若需要的步数大于20,直接输出too difficult,初始状态为:0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5思路:因为最多走20步,当存搜索时间复杂度4^20, 所以我们可以分别从当前状态和初始状态进行双向

2017-08-25 21:56:35 531

原创 2017 Multi-University Training Contest 10 1002 Array Challenge HDU 6172(找规律 矩阵快速幂)

题意:There’s an array that is generated by following rule.h0=2,h1=3,h2=6,hn=4hn−1+17hn−2−12hn−3−16And let us define two arrays bnandan as below.bn=3hn+1hn+9hn+1hn−1+9h2n+27hnhn−1−18hn+1−126hn−81

2017-08-24 21:56:57 550

原创 2017 Multi-University Training Contest 10 1010 Schedule HDU 6180 (贪心)

题意: 有若干个活动,第i个开始时间和结束时间是[Si,Ei) , 同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 并输出所有教室的使用时间之和,每个教室的使用时间是该教师最后一个活动结束时间-第一个活动开始时间。思路:对每个活动拆成两点,对所有点排序,On遍历一遍,碰到左端点cnt++,右端点cnt--,维护cnt的最大值即为所需的教室数量,遍历同

2017-08-24 20:30:02 385

原创 2017 Multi-University Training Contest 10 1008 Monkeys HDU 6178 (贪心 读入挂fread)

题意:给你一棵n节点的树,现在让你放k个猴子,可以删边,问最少可以剩余几条边,放k个猴子,满足任意一个猴子至少与一只猴子相连。2思路:我们可以知道一条边连两个节点(猴子),这样每对点连一条边是最节约边使猴子放的尽量多。现在问题就转化成就是要找可以有几对点,可以从树根开始dfs,看他有几个儿子和儿子中已经成对的个数,若两者之差>=1,即存在一个儿子能与它成对。虽然算法是O

2017-08-24 19:53:59 633

原创 2017 Multi-University Training Contest 10 1011 Two Paths HDU 6181 (次短路)

题意:给你一个有向图,问你他的次短路长度(与最短路至少有一条边不同即可)思路:如果最短路有多条,那答案就是最短路,否则就是次短路求次短路(见点击打开链接):    思路:         把求最短路时更新最短路的那部分改一下。         dis1,dis2数组分别记录到该点的最短路和次短路         分三种情况:         

2017-08-24 19:43:49 358

原创 HDU 6166 Senior Pan (最短路 好题)

题意:给你一个n个点m条边的有向带边权的图。现在给你k个点,问k个点中最近的点对距离。 n, m, k 思路:这题的思路好强啊。。。任意两个点在二进制表示上肯定至少有一位是不相同的,所以我们可以枚举二进制的位数,每次把k个点中二进制某一位为1的分一个集合,为0的分一个集合,做一次最短路,找到这两个集合之间的最短路。枚举所有二进制的位数后,这样就包含了所有点对的最短路。(求集合与

2017-08-23 21:53:35 442

原创 HDU 6170 Two strings (DP)

题意:给你两个字符串,第二个字符串中含有'.'和'#', '.' 可以匹配任意字符,'#'和他前面的那个字符ch是一个整体,可以匹配任意数量的ch(0个也可以)。字符串长度思路:比赛的时候还想着贪心模拟。。。结果是个DP。。。dp[i][j]表示str1[1-i]与str2[1-j]是否匹配状态转移:见代码代码:#includeusing namespace

2017-08-23 20:31:20 309

原创 HDU 6162 Ch’s gift(树链剖分+线段树)

题意:给你一颗树,每个节点有一个值,q次询问,每次询问u到v的路径上节点权值在a至b的节点的权值和。n,q思路:可以离线处理,分别求出路径中代码:#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;int deep[maxn], fa[maxn], top[maxn]

2017-08-22 20:45:19 722

原创 HDU 6148 && 2017 百度之星复赛 1005 Valley Numer(数位dp)

题意:当一个数字,从左到右依次看过去数字没有出现先递增接着递减的“山峰”现象,就被称作 Valley Number。它可以递增,也可以递减,还可以先递减再递增。在递增或递减的过程中可以出现相等的情况。比如,1,10,12,212,32122都是 Valley Number。121,12331,21212则不是。度度熊想知道不大于N的Valley Number数有多少。(le

2017-08-18 18:51:46 431

原创 HDU 6146 && 2017 百度之星复赛 1003 Pokémon GO(递推)

题意:给你一个2*n的网格,你可以从任意一点出发,每次可以向附近走一步,包括斜对角,走完所有格子且所有格子恰好走一遍的方案数。思路:nyoj980原题,思路见:点击打开链接摘自他的:一共有两个递推数组:首先设Dn表示从左边或者右边的某个角出发,然后走遍所有格子回到同一列有多少种方法。明显D1=2,Dn=2*Dn-1所以Dn=2^n然后

2017-08-18 18:44:36 504

原创 2017 Multi-University Training Contest - Team 8 1011& HDU6143 Killer Names(容斥|| 第二类斯特林数)

题意:给你m种字符,让你填充两个长度为n的字符串,要求两个字符串不能有相同的字符,问最多有多少种填法。n,m思路:解这题的关键是解决用恰好k个字符去填充长度为n的字符有多少种方案。比赛时知道容斥可以做,但没想出来。。所以用了第二类斯特林去做,第二类斯特林数(点击打开链接):把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数。在这就是看作n个位置填充k个颜色,因为颜

2017-08-17 20:53:37 326

原创 CodeForces 839D Winter is here(数学 容斥)

题意:给你n个数,问你所有满足gcd>1的子集,每个子集贡献为子集内元素个数*子集gcd,问所有满足条件的集合的贡献和。思路:可以枚举gcd,计算每个gcd的贡献,设含因子i的个数为cnt[i], gcd为i的贡献个数为1*C(cnt[i], 1) + 2*C(cnt[i], 2) + 3*C(cnt[i], 3) ... + cnt[i]*C(cnt[i], cnt[i]))

2017-08-13 19:44:07 421

原创 BZOJ 4552 排序(二分 || 线段树合并)

题意:对一个1~n的全排列, 进行m次局部排序(0, l, r)将区间[l, r]数字升序排列(1, l, r)将区间[l, r]数字降序排列仅一次询问, 询问m次局部排序后第q位置上的数字1 ≤ n, m, q ≤ 1e5思路:这题有个神奇的做法,我们可以直接二分答案x,然后把大于等于x的都看作1,比x小的都看作0插入线段树中,然后执行m个询问,因为数组中

2017-08-12 00:59:01 986

原创 BZOJ 4756 Promotion Counting(线段树合并 || dfs)

题意:给你一棵n个节点的树,根为1,问你每个节点,它的子树中有几个节点比它大。思路:有一个简单的方法是可以遍历一下这棵树,树状数组维护,对于每个点的答案为 子树节点个数-(遍历它后比它小的数的个数-遍历它前比它小的数的个数)。遍历完它的子树节点后把它插入树状数组。还有一个方法是对于每个节点建立一颗权值线段树,然后自底向上合并,每次合并后就可以直接查找比它大的数的个数,因

2017-08-12 00:46:14 493

原创 BZOJ 2212 & POI 18 Tree Rotations(线段树合并)

题意:给定一棵2n-1个节点的二叉树, 每个叶子上有1~n的数字, 保证每个数字出现且仅出现一次 允许任意次交换某两棵兄弟子树 对交换完毕的树求先序遍历, 形成1~n的一个排列 求这个排列最小的逆序对个数 1 ≤ n ≤ 2 * 1e5 (1e6)思路:子树x内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右

2017-08-12 00:23:37 455

原创 Codeforces 35E Parade(扫描线 线段树||STL)

题意:给定n个底边均在X轴上的矩形, 输出矩形覆盖后的所有转折点 1 ≤ n ≤ 1e5, 1 ≤ hi ≤ 1e9,  - 1e9 ≤ li 思路:将每个矩形拆成(l, h)和(r, -h),排序后如果高度是正数,就加入数据结构中,如果是负数,就从数据结构中删除他的相反数,每次高度发生变化是记录答案,注意下x相同时要取一个最大的。这里数据结构可以用线段树,也可以用STL中的mul

2017-08-11 23:49:45 446

原创 CodeForces 617E XOR and Favorite Number(莫队)

题意: 给你n个数,m次询问,询问给你(l,r),问你满足l ≤ i ≤ j ≤ r, ai^(ai+1)^...aj = k的区间数。思路:因为又是区间又是没修改的询问,很容易想到莫队,但是怎么O(1)转移呢,可以利用异或的前缀和,具体思路可以看官方题解:We have array a.Let's calculate array pref (pref[0] =

2017-08-11 23:35:30 360

原创 CodeForces 785E Anton and Permutation (分块)

题意:初始是一个1-n的长度为n的有序数组,现在q次询问,每次询问交换a[l], a[r] 并且输出交换后整个数组有多少对逆序对(每次循环具有后效性)。1 ≤ n ≤ 200 000, 1 ≤ q ≤ 50 000思路:第一个分块题,看到一篇讲的非常好的博客(戳这里),我写的话肯定没他写的好,,,粘下他的思路吧:当交换a[l]和a[r]时。讨论区间为(l,r),那么

2017-08-11 01:35:10 564

原创 HDU 5213 Lucky(莫队+容斥)

题意:给你n个数和一个k,现在q次询问,每次给你两个区间L~R, U~V, 问你从L~R中取一个x,从U~V中取一个y,使得x+y = k的方案数。 N(1≤N≤30000)  M(1≤M≤30000)  Li,Ri,Ui,Vi(1≤Li≤Ri思路:这题的每次询问有两个区间,不好操作,因为这题的方案数区间与区间之间具有可加性,也就是说询问L~R和U~V,我们可以求出四个区间,再

2017-08-11 01:24:28 327

原创 POJ 2778 DNA Sequence(AC自动机+矩阵快速幂)

题意:给你m个病毒串,要求长度为n,不包含病毒串的个数。m (0 代码:AC自动机本身其实也可以看作是个状态机,每个节点可以向多个方向转移,然后根据状态间能不能转移。对于这题,要求长度为n,所以我们可以构造一个矩阵表示每个点一步能转移到的节点,矩阵的n次幂后,第一行的和就是起点出发走n步的方案数,也就是构成长为n的方案数。因为不能包含病毒,所以危险结点要去掉,也就是去掉向危险结点的

2017-08-11 01:12:52 393

原创 HDU 2222 Keywords Search(AC自动机模板)

题意:给你n个字符串,最后一行输入一个字符串,问最后一个字符串中出现了几个前面的字符串。思路:AC自动机模板题。AC自动机详解见点击打开链接模板:#include#include#include#include#includeusing namespace std;/*********************************************

2017-08-11 01:00:38 320

原创 BZOJ 2038 小Z的袜子(hose) (莫队算法入门题)

思路:第一个莫队题,感觉莫队对离线处理好强。。。如果我们已知[l,r]的答案,能在O(1)时间得到[l+1,r]、[l,r-1]、[l-1,r]、[l,r+1]的答案(不一定O(1)也可以,因为有时需要套下其他数据结构,复杂度变为n*sqrt(n)*logn 有时也是能接受的),即可使用莫队算法。时间复杂度为O(n*sqrt(n))。对于这题:询问L~R。设颜色为x,y,z..

2017-08-10 01:11:33 724

原创 CodeForces 292D Connected Components(并查集 前后缀)

题意:给你n个点,m条边,现在q次询问,每次询问给你一个l, r, 问你删除第l至r条边后,连通块的数量。(每次询问之后又把所有边加上) n 思路:想着暴力或是对询问区间进行排序再去操作,复杂度都很高,显然不行。每次询问是把一段区间的边删去,所以我们可以预处理出 1~i 和 j~m 条边构成的并查集,这样空间复杂度1e4*100,可以满足,每次询问,合并一下1~l-1和r+

2017-08-09 17:04:09 495

原创 POJ 2763 Housewife Wind(树链剖分(边权))

题意:给你一颗树,树边带权,q次询问,两种操作:0 u : 求从当前位置到u路径的边权和,(下一次操作时起始位置变成了u)1 i w : 将第i条边的权值改为wn 思路:还是一个裸的树剖,练练写树剖的熟练度。还有这题貌似卡vector?以后安起见都改用前向星写吧。代码:#include#include#include#include#includ

2017-08-09 16:55:59 389

原创 CodeForces 593D Happy Tree Party(树链剖分(边权) or LCA+并查集)

题意:给你一棵数,n个点n-1条边,每条边有个权值,q次询问,询问有两种:1 a b y : a到b的路径上不断进行y = y/xi(像下取整),问最后y的值2 p c :  将第p条边的权值改为c,c一定比原来这条边的值小思路:树剖:线段树记录区间的乘积,查询的时候当两者重链的top相等的时候注意去掉top点的权值。每条边的权值都是在1e18内,所以如果线段树某个元素

2017-08-09 01:32:40 629

原创 BZOJ 1036 树的统计Count(树链剖分(点权)入门题)

题意:给你一个n个节点的一棵树,每个节点有一个权值,现在q次操作,操作有三种:Change x y : 将x节点的权值改成yQMAX x y : 问你x到y路径上的最大值QSUM x y: 问你x到y路径上的权值和思路:第一个树剖题,树剖裸题,剖完后直接线段树查询即可。num[]数组,用来保存以x为根的子树节点个数top[]数组,用来保存当前节点的所在链的顶端节点

2017-08-08 01:05:40 439

原创 CodeForces 343D Water Tree(dfs序 线段树)

题意:给你一颗n个节点的树,1为根,初始时所有节点都为0,有三种操作:1 x :将x及其子树的所有节点都变为12 x :将x及其祖先都变为03 x :查询x的值思路:可以先求出dfs序,对于操作1,我们可以用线段树区间更新in[x]至out[x];对于操作2,需要更新它及其祖先,不太好操作,我们可以只将x变为0,这样对于操作3,我们可以查找其子树最小值,如果是0就代表它

2017-08-07 00:23:50 439

原创 2017百度之星资格赛 1003 度度熊与邪恶大魔王(DP 完全背包)

Problem Description度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来。邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力。度度熊一共拥有m种攻击方式,第i种攻击方式,需要消耗k[i]的晶石,造成p[i]点伤害。当然,如果度度熊使用第i个技能打在第j个怪兽上面的话,会使得第j个怪兽的生命值减少p[i]-b[j],当然如果伤害小于防御,

2017-08-06 00:59:41 793 2

原创 Lightoj 1132 Summing up Powers(矩阵快速幂)

题意:给你n和k,求(1^k + 2^k + 3^k + ... + n^k) % 2^32, n 思路:可以知道f(x+1) = f(x) + (x+1)^k,(x+1)^k 可以用二项式定理展开变成C(k, 0)*x^k+C(k, 1)*x^(k-1)...+C(k, k)*x^0这就可以构造矩阵快速幂了。具体思路:

2017-08-06 00:35:16 476

原创 Lightoj 1070 Algebraic Problem(矩阵快速幂)

题意:给你a+b和a*b的值,求a^n+b^n思路:代码:#include#include#includeusing namespace std;typedef unsigned long long ll;int n, m;struct node{ ll s[3][3]; node() {} node(ll s1, ll s2, l

2017-08-06 00:04:32 370

原创 HDU 5543 Pick The Sticks (DP 01背包)

题意:给你n个物品,每个物品有一个长度,一个价值,现在桌面长L,问你放在桌子上最大价值是多少。一个东西只要重心在桌面上就行,但东西不能重叠。思路:就是一个01背包,多一维表示现在放在桌子最边上的物品有多少个,因为最多只有两个物品能悬空。dp[i][j][k]:表示前i个物品,放了长度为j且已经有k个物品放在了桌边时的最大价值。状态转移: dp[i][j]

2017-08-05 00:57:26 343

原创 SPOJ VLATTICE Visible Lattice Points(莫比乌斯反演入门)

题意:题意和POJ3090类似只是变成三维,可以简化为求gcd(a,b,c)=1方案数,   0思路:代码:#include#include#include#includeusing namespace std;typedef long long ll;const int maxn = 1e6+5;bool vis[maxn];int mu[

2017-08-05 00:47:38 425

转载 莫比乌斯反演

摘自ACdreamers的博客莫比乌斯反演在数论中占有重要的地位,许多情况下能大大简化运算。那么我们先来认识莫比乌斯反演公式。 定理:和是定义在非负整数集合上的两个函数,并且满足条件,那么我们得到结论       在上面的公式中有一个函数,它的定义如下:     (1)若,那么    (2)若,均为互异素数

2017-08-05 00:29:08 268

原创 POJ 1811 Prime Test(判断大素数&求最小质因子)

题意:给你一个n(2思路:板子。用Miller_Rabin算法进行素数判断。在用Pollard_rho分解因子。代码:#include#include#include#include#includeusing namespace std;typedef long long ll;//************************************

2017-08-05 00:24:25 890

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除