自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CF - 776D 2-SAT

题意:n个门,每个门有一个初始的状态,或开或锁,有m个开关,每个开关都能控制若干门的状态,题目保证每个门一定会受到两个开关的影响。问是否有可能让所有门都开。思路:2-SAT,对于开关来考虑,每个开关要么开要么关,两种状态true和false,设xi为true就是开关i打开,xi为false就是开关i关闭,对每个门来说,如果一开始就是打开,那么变化量就要为0,若这个门受到开关i和j的控制

2017-02-24 10:05:03 618

原创 CF - 617E 莫队算法 + 分块

题意:给出n个数的序列,给出m个区间[L,R]的询问,问在[L,R]中有多少段子区间的异或和等于k。思路:莫队算法,先保存前缀异或和,然后对于每次从[L,R]转移到[L,R+1]只需要O(1)的时间,只需要知道sum[R^k]有多少即可,因为每个数都不大,可以直接开一个数组保存。另外这题的莫队需要分块处理,否则还是T。代码:#include #include #incl

2017-02-23 21:29:09 593

原创 51Nod - 1376 dp

题意:数组A包含N个整数(可能包含相同的值)。设S为A的子序列且S中的元素是递增的,则S为A的递增子序列。如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS)。A的LIS可能有很多个。例如A为:{1 3 2 0 4},1 3 4,1 2 4均为A的LIS。给出数组A,求A的LIS有多少个。由于数量很大,输出Mod 1000000007的结果即可。相同的数字在不同的位置

2017-02-20 16:57:35 551

原创 HDU - 5794 dp + 容斥思想 + Lucas

题意:一个n*m的棋盘,初始时刻一枚棋子在(1,1)位置,每次他只能从(x,y)移动到(x+1,y+2)或者(x+2,y+1)的位置,棋盘上还有一些障碍点,这些点不能到达,问最后旗子能到达(n,m)的方案数。思路:首先画几个例子,观察旗子能到达的点的规律,统计出规律后发现,能到达的点组成了一个杨辉三角,这时候为了方便处理,进行坐标转换,以杨辉三角最左边的一条边和最右边的一条边作为坐标轴

2017-02-20 15:23:59 345

原创 HDU - 5514 容斥原理

题意:m个石头围成一个环,编号从0到m-1,有n个青蛙在编号为0的石头上开始往后跳,每只青蛙可以从第j个石头跳到第j+a[i]个石头,每个石头只要被青蛙跳到一次,就算被占领(永久),问最后被占领的石头的编号总和是多少?思路:利用巧妙的容斥思想,并不是简单的套用模板。首先能够观察到每个青蛙能跳到的位置是d[i] = k * gcd(a[i], m),但是lcm(d[i], d[j

2017-02-19 21:23:53 692

原创 51Nod - 1407 容斥原理 + dp

题意:有n个整数,问从他们中取出若干个数字相与之后结果是0的有多少组。思路:这道题需要51nod1406作为基础,链接:点击打开链接因为从正面考虑直接求解相与和为0不好做,所以可以利用容斥来解决,因为数的总量就这么大,所以我们在总数中减掉相与和为1的方案数,相与和为2的方案数等等,就可以得到最后的答案,可以用dp求出来对于每一个x都有a[i] & x == x的个数(也就是1406

2017-02-19 18:50:09 1178

原创 HDU - 2222 AC自动机模板题

题意:多个模式串在文本串中匹配。思路:AC自动机模板,AC自动机其实就是KMP与Trie的结合。代码:#include using namespace std;const int SIGMA_SIZE = 26;const int MAXNODE = 500010;const int MAXS = 1e4 + 10;map ms;struct Aho

2017-02-18 15:35:00 384

原创 CF - 665E 字典树

题意:给出一串长度为n的序列,找到有多少个子串的异或和 ≥ k。思路:字典树的套路,因为异或和满足前缀和性质,所以[l,r]区间内的a[i]的异或和就可以表示为sum[r]^sum[l-1],这样构造一个sum的字典树。每次用sum[i]在字典树上爬,同时与k进行每一位的比较,一定要保证sum[i]和它爬的字典树的路径的异或和要≥k,所以异或和的每一位都要≥k的每一位。故分为四种情

2017-02-18 15:09:51 1031

原创 51Nod - 1406 dp

题意:有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000Input第一行输入一个整数n。(1<=n<=1,000,000).第二行有n个整数a[0],a[1],a[2],...a[n-1],以空格分开.(0Output对于每一组数据,输出1000001行,第i行对应和i相与结果是i的有多少个数字。Inp

2017-02-18 11:08:19 924

原创 HDU - 3652 数位dp水题

题意:找到[1,n]中的满足数位上有子串13,且mod13 == 0的数字有多少个。思路:数位dp水题代码:#include #include #include #include using namespace std;typedef long long ll;int a[20];ll dp[20][15][15][2];ll dfs(int pos,

2017-02-14 22:16:55 382

原创 51Nod - 1682 哈希 + 乱搞

题意:中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数。现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数。Input第一行一个数n(n<=8000)第二行n个数,0OutputN个数,依次表示第i个数在多少包含其的区间中是中位数。

2017-02-14 12:05:35 372

原创 HDU - 5536 字典树

题意:给出长度为n的序列s1到sn,以及一个表达式 (si + sj) ^ sk的最大值,^代表异或运算,其中i,j,k不能相同。思路:一个典型的字典树处理异或和的问题,思路就是先将所有si按照二进制位从高到低拆成32位然后储存在字典树中,然后枚举i和j,让s[i]+s[j]在字典树上爬,每一位尽量往与当前位数相反的方向爬,这样最终结果这一位就是1,如果相反方向节点不存在,那么往相同方

2017-02-14 11:29:30 390

原创 HDU - 2087 KMP

题意:从文本串种匹配模式串,要求找到最多有多少个互相不重叠的模式串。思路:这里要求匹配结果相互不重叠,只需要修改一下KMP算法,在每次匹配成功的时候,将j变为0即可。代码:#include #include #include #include using namespace std;const int MAXN = 1005;char s[MAXN], t[MAX

2017-02-14 09:14:59 265

原创 HDU - 1686 KMP裸题

题意:求文本串中有多少个模式串。思路:kmp算法是ac自动机的基础,其实质就是建立一个自动机,让文本串在自动机上运行。其中最关键的就是next数组,对于这个一定要深刻理解。next[i]数组所表达的含义就是对于第i个字符来说,前i-1个字符中最大的前缀和后缀能匹配上的长度。举个例子:abcdabd,最后一个字符d的前缀是abcdab,可以发现这里面最长的能自由匹配的前缀和后

2017-02-14 08:48:11 629

原创 HDU - 4324 拓扑排序

题意:给出n个人的喜欢关系,mp[i][j] == 1表示i喜欢j,规定若a不喜欢b,则b一定喜欢a,问这些关系中是否存在三角恋的关系,即(a->b,b->c,c->a)。思路:题目的要求下,显然任意两个人之间一定有一条单向边,那么可以发现如果存在环,一定至少有一个长度为3的环,画一画就能看出来。所以这道题只需要判断是否存在环即可,可以利用拓扑排序,也可以直接dfs搜环。代码:

2017-02-13 16:15:48 340

原创 HDU - 4568 最短路 + 状压dp

题意:给出一个n*m的方格矩阵。其中某些点有宝藏,每个方格都有一个经过的代价,若为-1则不能经过,现在一个猎人需要将所有宝藏都拿走,他可以从矩阵边界任意的位置进入,也可以从边界上任意位置离开,(但是要注意只能进入和离开各一次),求把所有宝藏拿走的最小代价,如果不能拿走则输出-1。思路:这道题题意很坑,经过实践发现两个坑:1.猎人只能进入矩阵和离开矩阵各一次,否则第二个样例答案就是1

2017-02-13 11:43:26 527

原创 51Nod - 1781 dp + 线段树 + 离散化

题意:Pinball的游戏界面由m+2行、n列组成。第一行在顶端。一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行且列数在Ai~Bi之间的球,将其移到下一行的第Ci列。 使用第i个漏斗需要支付Di的价钱,你需要保留一些漏斗使得球无论从第一行的哪一列开始放,都只可能到达第m+2行的唯一 一列,求花费

2017-02-13 09:28:43 440

原创 HDU - 3666 差分约束 + 对数

题意:给出一个矩阵c以及L和U,判断出是否存在两个序列a1,a2...an和b1,b2,..bm,使得满足: a[i] / b[j] * c[i][j] = L思路:查分约束。根据题意可以列出如下的关系式:a[i] / b[j] b[j] / a[i] 这时候利用对数,将除法转化成减法,得到:log(a[i]) - log(b[j]) log(b[j]) - l

2017-02-12 10:10:37 366

原创 HDU - 1384 差分约束

题意:要求选取一个最小的集合,集合中的数满足n个条件,每个条件:在区间[ai,bi]内至少有ci个数备选在了集合里。思路:差分约束,设sum[i]表示在i-1中选取到集合中的数的个数,那么题目的要求就可以描述为如下的关系:sum[a] - sum[b+1] sum[i] - sum[i+1] sum[i+1] - sum[i] 这样就可以转化成关于查分约束的模式了,因为

2017-02-11 21:41:44 450

转载 最短路+差分约束学习笔记

关于最短路和差分约束的写得很全面的一篇博客,转载自:http://www.cppblog.com/menjitianya/archive/2015/11/19/212292.html目录  一、引例      1、一类不等式组的解二、最短路      1、Dijkstra      2、图的存储      3、链式前向星

2017-02-11 21:02:03 796

原创 HDU - 3395 二分图

题意:n条鱼,每条鱼有一个价值,然后给出一个交配意愿的图,mp[i][j]表示的是鱼i想和鱼j交配,两条鱼之间只要有一条想交配既可以交配,每条鱼只能和一条鱼交配,所生的孩子的价值是父母价值的异或和,求交配完成后孩子的最大价值和。思路:二分图裸题,但是我用的vector存图的板子,T到姥姥家,后来看别人ac代码改成了邻接矩阵93ms就过了,莫名其妙啊代码:int main() {

2017-02-11 10:00:04 309

原创 51Nod - 1503 多线程dp + 背包思想优化

题意:一只猪走进了一个森林。很凑巧的是,这个森林的形状是长方形的,有n行,m列组成。我们把这个长方形的行从上到下标记为1到n,列从左到右标记为1到m。处于第r行第c列的格子用(r,c)表示。刚开始的时候猪站在(1,1),他的目标是走到(n,m)。由于猪回家心切,他在(r,c)的时候,只会往(r+1,c)或(r,c+1)走。他不能走出这个森林。这只猪所在的森林是一

2017-02-10 09:52:10 796

原创 51Nod - 1655 找规律 + 构造

题意:一个n(3<=n<=100)个点的完全图,现在给出n,要求将每条边都染上一种颜色k(1<=k<=n),最终使得所有三个点构成的环(C(n,3)个不同的换)上三条边的颜色和在所有颜色中任选三种颜色的组合(C(n,3)种方案)一一对应,由你来给出染色方案。本题有多组数据Input第一行一个整数T,表示数据组数接下来T行每行一个整数n,表示完全

2017-02-09 13:45:44 387

原创 51Nod - 1523 构造

题意:一个字符串是非回文的,当且仅当,他只由前p个小写字母构成,而且他不包含长度大于等于2的回文子串。给出长度为n的非回文串s。请找出字典序比s大的,而且字典序要最小的长度为n的非回文。Input单组测试数据。第一行有两个整数n 和p (1≤n≤1000; 1≤p≤26)。第二行包含一个字符串s,它的长度是n。输入保证他是非回文的。

2017-02-09 08:56:05 623

原创 51Nod - 1416 搜索环

题意:福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”。基础级别的时候是在一个n×m单元上玩的。像这样: 每一个单元有包含一个有色点。我们将用不同的大写字母来表示不同的颜色。这个游戏的关键是要找出一个包含同一颜色的环。看上图中4个蓝点,形成了一个环。一般的,我们将一个序列 d1,d2,...,dk 看成一个环,当且仅当它符合下列条件时:1

2017-02-08 18:51:10 492

原创 51Nod - 1352 拓展gcd

题意:给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足:第一个元素是A的倍数且第二个元素是B的倍数。提示:对于第二组测试数据,集合分别是:{1,10},{2,9},{3,8},{4,7},{5,6},{6,5},{7,4},{8,3},{9,2},{10,1}.满足条件的是第2个和第8个。

2017-02-08 11:13:01 412

原创 51Nod - 1099 贪心

题意:有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i])。例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。Input第1行:1个数N,表示任务的数量。(2 <= N <= 100000)第2 - 

2017-02-07 15:56:36 278

原创 HDU - 1166 CDQ分治

题意:树状数组的入门题,单点修改,区间求和。思路:这题是最基础的BIT,也可以用cdq分治来做。简单地介绍一下cdq分治。cdq分治是一种特殊的分治法,只能支持离线操作,往往可以替代复杂的数据结构,而且具有常数较小的优点。cdq分治的基本思想:1. 对于一段序列[L,R);2. 将其从中间分成两个部分[L,M),[M.R),并递归处理子问题。3. 归并时要考虑左半部

2017-02-07 14:49:59 442

原创 HDU - 1556 树状数组(区间修改+单点更新)

题意:n个数,初始化为0,每次给一段区间的数+1,最后输出n个数。思路:树状数组区间修改+单点查询的入门题,每次更新区间[l,r]的时候,给区间左端点l处+1,右端点后一个r+1处减1,这样,最后求i位置的值,只要从左往右求一遍前缀和,小于l的位置都没有增量,l到r之间会有增量1,r之后+1,-1相互抵消也没有增量。代码:#include using namespace st

2017-02-06 11:12:02 431

原创 HDU - 5690 分治 + 快速幂思想

题意:判断数位长度为m且每一位上的数字都是x的数模k的结果是否等于c。思路:也可以算是一种分治吧,把大的整数按数位折半考虑,类似于快速幂的处理方式,如果是偶数,前一半和后一半的结果相同,不需要重复处理,如果是奇数,合并的时候加上中间的x即可。代码:#include using namespace std;typedef long long ll;ll pow_mod(l

2017-02-06 10:24:41 405

原创 POJ - 1987 树分治

题意:与POJ-1741一致,传送门:点击打开链接思路:没什么意思,直接套模板。代码:#include #include #include #include #include using namespace std;typedef long long ll;const int MAXN = 1e5 + 10;struct node { int v;

2017-02-06 09:51:02 337

原创 POJ - 3714 分治

题意:给出两个集合,每个集合中有n个点,求属于不同集合的两个点之间的最短距离。思路:分治,套用最接近点对问题的方法,只要在保存res的时候判断是否是属于同一个集合即可。代码:#include #include #include #include using namespace std;typedef long long ll;const int MAXN = 2e5

2017-02-06 09:07:21 1241 1

原创 HDU - 3634 离散化

题意:给n个矩形,每个矩形都有自己的单位价值,矩形之间可能会有重叠部分,对于重叠部分任意选择属于哪个矩形,求能构成的最大的价值。思路:看题解时学到了一种优秀的离散化方法。这里将x和y分别离散化,然后每个坐标都构成一个点,组成2*n * 2*n的小方格,因为n非常小,所以遍历到一个矩形的时候,先找到它x1,y1,x2,y2对应的离散化后的坐标,然后将这一区域内的所有小方格都更新成当前

2017-02-05 21:26:18 421

原创 HDU - 1007 分治(最接近点对模板)

题意:求出平面上n个点中最接近的两个点的距离。思路:最接近点对问题,利用分治法解决,先按照x排序,进行分治,并对每段区间内的点再按照y排序,可以证明每段区间内的比较次数为常数,复杂度为O(nlogn)。代码:#include using namespace std;const int MAXN = 1e5 + 10;struct node { double x,

2017-02-05 20:01:39 393

原创 51Nod - 1674 分治

题意:lyk拥有一个区间。它规定一个区间的价值为这个区间中所有数and起来的值与这个区间所有数or起来的值的乘积。例如3个数2,3,6。它们and起来的值为2,or起来的值为7,这个区间对答案的贡献为2*7=14。现在lyk有一个n个数的序列,它想知道所有n*(n+1)/2个区间的贡献的和对1000000007取模后的结果是多少。例如当这个序列为{3,4,5

2017-02-05 18:53:09 432

原创 51Nod - 1677 树形dp + 组合数学

题意:给定一棵n个节点的树,从1到n标号。选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少。现需要计算对于所有选择k个点的情况最小选择边数的总和为多少。样例解释:一共有三种可能:(下列配图蓝色点表示选择的点,红色边表示最优方案中的边)选择点{1,2}:至少要选择第一条边使得1和2联通。 选择点

2017-02-05 16:32:00 706

原创 51Nod - 1548 枚举 + 暴力

题意:一天,欧姆诺诺姆来到了朋友家里,他发现了许多糖果。有蓝色和红色两种。他知道每颗红色糖果重Wr克,每颗蓝色糖果重Wb克。吃一颗蓝色糖果会给他带来Hb的欢乐值,吃一颗红色糖果会给他带来Hr的欢乐值。欧姆诺姆最多只能吃C克的糖果,而且每一颗糖果不能只吃一半。现在他想通过吃蓝色和红色的糖果来获得最大的欢乐值。样例解释:每一种糖果吃两颗即可。

2017-02-05 10:08:59 532

原创 51Nod - 1535 图论基础 + 搜索环

题意:很久很久以前的一天,一位美男子来到海边,海上狂风大作。美男子希望在海中找到美人鱼,但是很不幸他只找到了章鱼怪。 然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪。由于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标。第一次射击的分析结果会反映在一张由n个点和m条边组成的无向图上。现

2017-02-05 09:50:10 758

原创 51Nod - 1101 背包

题意:N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 10 20 50 100元。例如:5分钱换为零钱,有以下4种换法:1、5个1分2、1个2分3个1分3、2个2分1个1分4、1个5分(由于结果可能会很大,输出Mod 10^9 + 7的结果)Input输入1个数N,N = 100表示1元钱。(

2017-02-03 23:05:42 315

原创 51Nod - 1102 单调栈

题意:有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。Input第1行:1个数N,表示数组的长度(0 <= N <= 50000)第2 - N + 1行:数组元素A[i]。(1 Output

2017-02-03 22:22:42 329

空空如也

空空如也

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

TA关注的人

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