自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zxl博客

学如逆水行舟,不进则退 , 心似平原野马,易放难收

  • 博客(122)
  • 收藏
  • 关注

原创 Educational Codeforces Round 55 G 最小割

题意,一个图,选一个子图,使得  v[i] 边权,a[i]点权思路:最小割经典模型,我们把边和源相连流量v[i],点和汇向连流量a[i],中间的依赖用inf相连,那么这样的图最小割的含义就是“不选的边和选了的点的和”,那么这个值最小答案自然最大, 就是答案了代码:#include<bits/stdc++.h>#define PB push_back#define ...

2018-12-01 14:07:51 143

原创 Educational Codeforces Round 55 E 分治

题意:一个数组,选一个连续区间[L,R] 使得 区间内相同的数 + 区间外a[i]=c的个数最多思路:似乎可以o(n),这里提供一个O(nogn)的分治方法,这类只选一个区间的问题很容易想到分治法,难在如何合并左右区间,这里我们贪心合并即可,维护一下 左右可并的每种a[i] 的最优答案。可能表述不清,详细见代码。代码:#include<bits/stdc++.h>#de...

2018-12-01 13:29:56 166

原创 hdu 6430 bitset暴力

题意:一棵有根树,1e5,输出每个节点的一个查询,查询定义为:以这个节点为根的树任选两个节点 权值GCD 最大 若没有孩子,则为-1思路:群里看见bitset居然有find_first()和find_next(x)的操作,搜了一下抄了一个大佬的思路具体实现就是 暴力子树的因子,用bitset合并,查询就在合并的时候&(保证了因子出现两次)然后find_first一下就行了。因为...

2018-11-08 21:13:10 151

原创 AC自动机+DP codeforces86C

没积分了。。更新一下。。http://codeforces.com/contest/86/problem/CAC自动机加DP经典题目,题意:。。。思路:构建AC自动机,在AC自动机上跑,这样通过构造可以保证满足条件。再次基础上DP计数,DP[ len ][ idx ][ fail ]          len 表示 已经走了几步,idx表示在自动机上第几个节点,fail表示已经...

2018-09-17 17:02:47 222

原创 CF895C dp/线性基

链接:点击打开链接题意:n个数,选子集乘积之和是完全平方数的子集个数思路:首先题目中ai非常小,显然可以状态压缩因子把问题转化成异或和为0的方案数字。在此基础上可以DP解决或者使用线性基DP方法用dp[i][j]表示i次插入时异或和为j的方案数,我们可以想到插入一个新数字就是   dp[i-1][j ^ st]+=dp[i-1][j]但是到此每插入一个数都要遍历j (2^1

2017-12-07 01:18:55 359

原创 Gym-101177B 递归想法题

题意:一串无限长的0,有m个操作(m思路:看起来非常复杂,实际上突破口在于L,R很小,虽然操作复杂,直接模拟会单次操作on,但是我们可以考虑一个一个字符构造,实际上就是一个递归的过程。具体方法可以大家尝试一个一个字符构造,然后递归模拟就好了。代码:#include#define PB push_back#define pii pair#define MP make_pair#d

2017-10-09 14:16:38 380

原创 计蒜客 A.Artwork 并查集+set

链接:点击打开链接题意:画直线分区域,问每画完一条线有几个区域思路:倒着做变成擦直线,合并区域或形成新区域。可以使用并查集来维护。启发:类似拆分的问题都可以倒过来离线变成合并的问题。代码:#include#define LL long long#define PB push_back#define pii pair#define MP make_pair#define X

2017-10-03 22:56:27 264

原创 hdu 6199 dp

题意:巨毒。。实际上就是A,B都希望自己得到的最多。前一个人拿k个,下一个人能拿k or k+1思路:倒着DP。。实际上两个人是同一种策略,那么其实一个dp数组就可以了。。从最后一步拿k个往回推,dp[i][j]表示取第i个时候拿走包含i的j个,转移方程dp[i][j]=sum[i+j-1]-sum[i-1]-max(dp[i+j][j],dp[i+j][j+1]) (PS,注意一下边界的合法

2017-09-20 00:13:02 362

原创 hdu 6212 区间dp

题意:祖玛游戏,最少的弹药消除所有珠子思路:区间dp,注意枚举中间空一个珠子的情况,这里要注意的是中间不能有两个,并且两边的加中间枚举的也不能是三个(因为这样不管先取左右都会直接被消除掉)代码:#includeusing namespace std;struct node { int num, color;}ball[515];int f[515][515];int a[5

2017-09-19 19:05:07 314

原创 hdu 6214 割边最少的最小割

题意:求割边最少的最小割思路:流量*mod + 1,最小割等于 maxflow/mod   割边数量等于maxflow%modps.注意mod要取的足够大代码:#includeusing namespace std;int n,m;const int maxn=1e5+10;const int maxm=1e5+10;const long long inf = 1e18;

2017-09-19 18:10:51 399

原创 2017沈阳网络赛G XOR 分块(分类讨论sqrt)

题意:一棵树,点权,Q次询问,A---B路径上每K个点的异或和链接:点击打开链接思路:分类讨论,k小于200,类似dp的预处理,在求lca的过程中可以求出来,k大于200,直接暴力跳,最多跳sqrtn步,其中还带个log的倍增。1200ms AC。。PS  :场上手残。。。代码:#includeusing namespace std;const int MAXN = 100

2017-09-16 20:11:04 236

原创 HDU 6166 二进制分组

题意 :有向图,点集内的任意两点最短路径的最短值思路 :很有意思的题目,直接两两枚举肯定不可以,这里考虑二进制分组,这样只需要分18次就能使得一次分组时最优解在两个不同的集合里面。接下来就是分组后缩点一下跑他20次最短路。。很有意思!!PS vector被卡了常数。。。代码:#includeusing namespace std;#define X first#defin

2017-09-14 20:30:37 262

原创 hdu 6194 后缀数组

题意:一个字符串,查询恰好出现k次的子串的数目思路:后缀数组在height上进行操作。我们直接枚举长度为k的区间求min值,但是要注意的是直接这么算是会重复的,同时也可能超过k次,这样我们就需要把枚举的前一个和后一个都判断一下,这样保证了等于k次,同时也保证了没有重复统计。代码:#includeusing namespace std;#define X first#define

2017-09-13 18:42:40 355

原创 hdu 6201 树分治

题意:一棵树,边全,点权,点权是书的价格,边权是运费。任选两个点买卖,求最大 利益。思路:nlogn树分治,当时一看1e5,又是求树上路径的,想也没想直接莽分治,分治的过程中维护最大作为买和卖的利益就好了。代码:#includeusing namespace std;#define X first#define Y second#define PB push_back#def

2017-09-13 18:24:24 414

原创 hdu 6183 线段树的空间优化

题意:一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色c;②2 X y1 y2表示查询在(1, y1)到(X, y2)范围内有多少种不同的颜色:③0表示清屏;④3表示程序退出(0思路:开五十个线段树(一种颜色一个),以y为下表,保存min x,(因为查询x固定1---X)然后暴力查询50个就好了但是显然碰到了一个问题,1e6 开5

2017-09-07 18:27:59 603

原创 hdu 6156 回文数 数位dp

题意:k进制下的回文个数。。其实就是普通的。。稍加修改思路:老题,直接枚举L进制--R进制代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define X

2017-09-07 15:47:44 358

原创 hdu 6191 可持久化trie||线段树套trie||trie启发式合并

题意:一个树,q次询问,求xi xor u的子树的max值思路:考虑可以直接dfs,映射到数轴上,然后就是裸的可持久化trie了。。时间复杂度nlogn,同理nlognlogn可以线段树套trie(这个题没按这个写。。应该可以?参考51nod1295,第一次写可持久化trie就是树套树水过去的。。)同理,如果多个log时间复杂度可以就可以暴力启发式合并。。可持久化trie代码:

2017-09-06 19:58:14 353

原创 fread 快速读入

新科技。。。比getchar的读入挂快的不知道哪里去了。。。顺便一提有时候普通getchar还没scanf快。。。struct FastIO { static const int S = 1e7; int wpos; char wbuf[S]; FastIO() : wpos(0) {} inline int xchar() {

2017-08-27 12:03:09 4698 1

原创 hdu 6171 ida*

题意:一个数塔,类似八数码的样子。。思路:正解双向搜索。。时间复杂度非常科学。。不过数据弱ida*搞了过去。。。。(大力出奇迹?)代码;#includeusing namespace std;#define X first#define Y second#define PB push_back#define MP make_pair#define MEM(x,y) mems

2017-08-26 20:50:43 354

原创 hdu 6170 正则表达式

题意:给你一个正则表达式(伪),唯一不同其中.*代表 不是 *个. 而是.先匹配再星思路:场上dp过了(瞎分类讨论不知道wa了多少次。。),试图用正则来着但是不会写。。。下来学习一下姿势。。首先regex这个c++11的库函数就不多说了,知道怎么构造正则和匹配就可以了。重要的还是正则姿势。实际上正解的就是把 .* 换成(.)\1*,匹配num,其中n

2017-08-22 21:28:13 336

原创 hdu 6162 离线树链剖分

题意:一个树,点权,查询x到y路径上 价值在[a,b]之间的点的权值和思路:剖分模板题,首先要想到离线处理,第一步将查询分为query(x,y,0,b)-query(x,y,0,a);接下来我们就发现了可以按照点权的大小以及查询a的大小离线处理,这样就相当于只查询query(x,y)。。。故直接上个剖分点权的模板代码:#includeusing namespace s

2017-08-22 18:52:01 312

原创 hdu 6148 数位dp

题意:中文题,求小于等于n的"山谷"数的个数思路:数位dp,注意此题中状态转移与前导0有关即可。代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define

2017-08-18 21:17:28 197

原创 hdu 6133 树状数组+分类讨论

题意:。。比较复杂,就是一个树有点权,一个点的答案是子树的所有点权的前缀和的和(贪心思想转换后的题意),问所有答案。首先这是个假题解。。只是提供一个思路。。。数据不强AC了。。。思路:标解是个启发式合并。。这里尝试另一种做法(因为不会),平均时间复杂度是nlogn^2。(数据弱。。)考虑合并操作复杂,我们可以分为合并暴力,单个儿子直接得答案两种操作解决问题。(看起来很玄学。。),事实上是这

2017-08-18 21:06:25 272

原创 hdu6138 hash+二分

题意: n个串,每次查询两个,问最长的公共自串并且这个子串要是n个串其中一个的前缀。思路:正解是AC自动机。。。这里瞎搞了一下居然过了,直接二分答案,然后判断(类似hash求公共子串一样),就再加一个是不是前缀的判断就好。。时间复杂度理论上最差n*m*logn。。。但是神奇的只跑了150ms。。。代码:#includeusing namespace std;#d

2017-08-17 20:16:32 342

原创 hdu 6143 组合数学+dp

题意: m个字母,组成两个长度为n的字符,其中一个字母不能同时出现在两个串中。问总方案?思路:枚举m个中恰好有i个在第一个串,有j个在第二个串。。然后求个和。。具体其中n个空恰好k种颜色,可以用dp预处理。dp[j][i]=((dp[j-1][i]*i)%mod+(dp[j-1][i-1]*i)%mod)%mod;代码:#includeusing namesp

2017-08-17 19:28:46 414

原创 hdu 6140 bitset+背包

题意:。。。题意有点毒啊 。。。"For those who do not have the patience to read the problem statements"。。。但是事实上上面那个式子是有用的。。。n个数,每个数有属性,分别对应可以选择正负或都可以。然后让你选一个集合,sum==k思路:加上题意的限制。。。其实每次能组成的数都是连续的。我们只要维护最左端和右端就可

2017-08-17 18:29:42 425

原创 hdu 6118 最小费用可行流(注意与最大流的区别)

题意:思路:。。。。注意是可行流,在找增广路的时候条件要进行修改。。。。修改的地方看代码注释代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#

2017-08-15 21:06:40 1191

原创 hdu 6125 分组背包+状态压缩

题意:1---n 选择不超过k个数,使得他们的乘积不包含完全平方因子。思路:考虑有相同因子的数不能同时选择,自然想到了分组,并且要加上一个维度K(来限制当前选了几个数字),但事实上一个数又可以属于很多组。。。这里就可以使用状态压缩来压缩因子,{2,3,5,7,11,13,17,19},除去这些因子之后,就可以分组啦。当然这些因子本身也是需要判断互不相交的,我们可以枚举状态i j

2017-08-15 20:52:11 836

原创 hdu 5925 搜索

题意:一个图,n个障碍,求联通块思路: 图很大,障碍物很少。把联通的障碍物块抠出来,然后暴力。代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair

2017-08-14 20:03:46 195

原创 hiho 1553区间统计 莫队算法+分块思想

题意:a数组,q次查询,[l,r]区间内不同数的个数的K次方的和思路:考虑如果没有K次可以随便莽,这里主要有k这个限定条件。。这里提供一个O(n sqrt(n) logn)的方法,在莫队的过程中,我们不直接计算答案。在这里引入分块的思想。通过维护两个数组就,一个是x的出现次数,一个是出现y次的数有几个。那么分两种情况,一种是出现次数小于根号N的,一种是大于根号N的。又因为大于根号N

2017-08-13 20:54:50 795

原创 hdu 6109 数据分割(并查集,倍增)

题意:比较绕,n个表达式,表示a==b或者a!=b,有矛盾就重新开始,问可以分成多少段,每段多大。。思路:倍增,On判断,也可以并查集加set维护(合并要注意使得集合头要是最早出现的。。),这里提供一下倍增的做法代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define

2017-08-12 21:16:07 783 5

原创 hdu 5506 bitset 优化

题意:n个数组,划分成l个集合,每个集合至少有一个数组,并且一个集合中的数组至少要有一个相同的数,问你是否存在这样的划分方案思路:L比较小,直接暴力每个数组是在哪个集合里,大约30^5 同时用bitset维护某种集合是否合法,总时间复杂度30^5*300/64 看上去非常的大,其实加上合法性剪纸跑的还是飞快的。。。甚至0ms 。。。黑人问号???PS.随便搜搜有没有bits

2017-08-09 19:56:54 207

原创 hdu 6085 bitset优化

题意:a数组,b数组,q数组,q数组表示q次查询,查询是查询a数组b数组有多少对ai % bj =qi (在模2的意义下)思路:官方题解的操作就不多说了,主要涉及一个枚举区间(bi的K倍)异或求和最后就是答案,因为设计到取区间异或,所以需要手写bitset这里考虑用使用的方法,其实我们可以通过巧妙地位运算避免区间枚举,虽然时间总复杂度一致,我们考虑从大到小枚举余数,进行操作。核

2017-08-09 14:54:21 191

原创 hdu 6070 二分答案+线段树

题意: 区间价值为    区间元素种类数  /  区间长度    问最小价值的区间是?思路:直接求解很困难,考虑二分答案判断,注意这题的关键是将二分答案后的不等式进行变换,如官方题解。二分答案 mid,检验是否存在一个区间满足 size(l,r)/(r−l+1) ≤ mid,也就是 size(l, r) + mid × l ≤mid × (r + 1)。之后的问题就很好解决了,

2017-08-03 21:24:53 929

原创 hdu 6069 区间筛

题意:。。一个公式思路:和区间筛类似POJ 2689。。。筛出L,R的每个质因数的个数即可,然后简单的组合公式,就可以算出i的k次方的约数个数PS。。vector乱搞会卡常。。代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define PB push_back#de

2017-08-03 19:26:59 728 1

原创 hdu 6058 并查集

题意: 给你一个全排列,要你求这个序列的所有区间的第k大的和思路:一道链表好题。。虽然没用链表做。。这两天有机会用链表补一下。。  拿到题首先分析数据性质,一个是全排列,一个是k比较小,因此我们可以考虑维护每个点周围比这个点向左大0--k-1的数有多少和向右。(相当于枚举这个点作为第K大的区间有多少个),这里注意的是要跳过比枚举点要小的数,如果可以o1跳过,那么单个点维护就是o(k

2017-08-01 21:04:32 592

原创 CF 835D D. Palindromic characteristics 字符串hash

题意。 定义k回文,一个是k回文的串那么他本身是回文,并且左右相等,并且左右是k-1回文问:一个S,所以字串分别是x回文?输出1----n回文的数目思路:直接暴力记忆化搜索!枚举判断就好了,回文和相等的条件都用hash判断就好了,注意下标问题!!!!尤其是回文时候的下标问题!!!代码:#includeusing namespace std;#define MEM

2017-08-01 02:01:18 421

原创 51nod 1791 合法括号子段 DP

思路: DP[i] 表示以i结尾的方案数,模拟一遍括号匹配过程就好了代码:#includeusing namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define PB push_back#define MP make_pair#define X first#define Y second#define bug

2017-07-31 19:51:59 208

原创 G. Snake Rana 容斥原理

题意: 统计网格矩形的子矩形数目,其中要求每个格子不能包含一些特殊格子(特殊格子小于20)思路:统计格子是个老问题,sum=n*(n+1)/2*m*(m+1)/2 这里要求一些格子不合法,显然用总答案减去非法答案更容易计算。计算非法答案时k代码:#includeusing namespace std;#define MEM(a,b) memset(a,b

2017-07-31 19:30:26 306

原创 hdu 6035 树分治

题意:一棵树,路径的权值等于路径上颜色的种类,问全部路径的价值和思路:题解的方法就不多讲了,这里提供一个树分治做法,首先要将原问题转换为每种颜色的经过路径数量的总和(也就是计算每种颜色的贡献,贡献为经过这种颜色的路径数量)树分治的做法则为,维护重心下的子树第一次出现某种颜色的位置,通过这个位置已经这个点下面的子树大小,和一个相同颜色所有第一次出现的子树大小和来计算(

2017-07-30 17:19:58 333

空空如也

空空如也

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

TA关注的人

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