自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不期而遇

栉风沐雨,仍愿你甘之如饴

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

原创 POJ 3087 Shuffle'm Up(模拟或者BFS)

题目链接题目大意:读入三个字符串s1,s2,s3,每次将s1和s2字符串依次交叉(s2开始),例如设s1:ABC ,s2:DEF 则第一次交叉后为DAEBFC,然后又取上面的一半作为s2,下面的一半作为s1,又开始依次交叉,问你经过多少次后,能变成s3的状态,每次输出两个数,第一个数字代表是第几组测试数据,第二个数字代表最少需要多少次,如果始终不能变成s3则输出-1。分析:解法1:如果...

2018-07-31 20:58:36 116

原创 POJ 1410 Intersection(判断线段与矩形位置关系)

题目链接题目大意:判断一条线段与一个实心矩形(四条边以及中间包含的部分)是否相交。分析:线段与矩形四条边的不规范相交(交于一条线段的端点或者重合),以及线段在矩形的内部,都算作相交。这题看似简单,其实有很多比较细节的地方,比较坑,调了好久。#include<map>#include<set>#include<cmath>#include&lt...

2018-07-31 09:50:11 777

原创 POJ 1066 Treasure Hunt

题意:在金字塔内有一个宝藏p(x,y)。现在要取出这个宝藏,在金字塔内有许多面墙,为了进入宝藏所在的位置必须把墙炸开,炸墙只能炸每个房间墙的中点,求将宝藏运出城堡所需要的最小炸墙数。分析:虽然炸墙只能炸中点,但是因为每个房间里面是空的,而且关心的是最少要炸几面墙,金字塔范围因为只有100*100,所以直接枚举边上的每个点与宝藏的连线,与墙的交点个数最少的直线,就是炸墙的路线。#inclu...

2018-07-31 08:21:08 204

原创 POJ 2653 Pick-up sticks(线段相交)

题目链接题目大意:有n根木条(1 <= n <= 100000),一根一根的往一个坐标系上丢,问最后不被覆盖的木条有哪些,即丢的木条如果和前面丢的木条交叉的话,就会覆盖前面那根木条。分析:因为丢出的木条是按顺序给出的,因为在上方的木条不超过1000根,所以直接枚举每条线段,如果他后面有和他相交的线段,那么这条线段就会被覆盖,标记一下,最后输出没被标记的就行了。#inclu...

2018-07-31 08:14:01 139

原创 POJ 1556 The Doors(计算几何+最短路)

题目链接题目大意:有一个10*10的正方形房间中间用墙隔开,每个墙上有两个门给出门的两个端点的坐标求从左边中点走到右边中点所需要的最短路程。分析:计算每个墙的端点和其他墙的端点的距离(包括起点和终点),如果中间没有墙挡住。则它们的距离就是它们的直线距离,如果中间有墙挡住,则它们之间的距离,设置为无法到达,然后用最短路跑一遍求得左边中点到右边中点的距离。#include<map&...

2018-07-31 07:44:32 228

原创 POJ 1269 Intersecting Lines(直线相交判断 求交点)

题目链接题目大意:每次给你两条线段,判断它们的位置关系,如果相交,还需输出它们的交点。分析:线段之间存在三种关系,平行,共线,相交。#include<map>#include<set>#include<cmath>#include<queue>#include<stack>#include<cstdio&gt...

2018-07-31 07:32:28 176

原创 POJ 3304(判断直线与线段位置关系)

题目大意:给出n条线段的坐标,问是否能找到一条直线使得所有线段投影到这条直线上至少相交于一点,如果能找到这条直线就输出Yes!,否则输出No!分析:如果能找到一条直线(记为L1)与所有线段都有交点,那么做L1的垂线L2,垂足就是所有线段投影L2的交点。枚举两两线段各一个端点,连接这条直线L3,再判断剩下的线段与这条直线是否有交点。证明:如果L3与所有线段都有交点,则保持和所有线段相交,左右...

2018-07-30 08:05:35 312

原创 POJ 2398(计算几何 叉积)

题目链接题目大意:给你一个被n块挡板分隔成n+1个区域的盒子,给你m个点,从小到大输出含有点的个数的区域有多少个分析:这题其实和POJ 2318差不多的只是输出不一样,还有每个隔板的读入顺序不一定是从左到右的,所以读入完以后用sort排个序,这道题其实就是考对叉积的应用,计算矢量叉积是与直线和线段相关的算法的核心部分。设矢量P = ( x1, y1 ),Q = ( x2, y2 )...

2018-07-28 19:24:16 755

原创 POJ 2318 (计算几何 叉积)

题目链接题意:给你一个被n块挡板分隔成n+1个区域的盒子,给你m个点,问你每个区域有多少个点。分析:这道题其实就是考对叉积的应用,计算矢量叉积是与直线和线段相关的算法的核心部分。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则P × Q = x1*y2 - x2*y1,其结果是一个标量,对于叉积公式的推导,推荐参考这篇博客。显然有性质 P × Q = - ( Q...

2018-07-28 19:17:53 261

原创 POJ 1426 Find The Multiple(BFS和DFS)

题目链接题意:给你一个数n (1 <= n <= 200) ,求出一个任意的它的倍数,这个数只包含0或1。分析:首先暴力枚举肯定是不行的方法一:因为每一位要么是0,要么是1,所以我们可以用广搜同时对两种状态进行搜索,找到答案就停止搜索并输出答案即可#include<map>#include<set>#include<cmath>...

2018-07-27 16:18:26 124

原创 POJ 3278 Catch That Cow (BFS)

题意:给你两个数N(代表农夫John)和K(他的奶牛的位置) John每次有三种移动方式 1.向左移动一格 2.向右移动一格 3.移动到现在位置的2倍下标的位置,奶牛是静止的,问你John最少需要多少步走到奶牛所在的位置。分析:因为是求最少的步数,所以直接可以用BFS来求解 这题在复习的时候又写了一次一直RE,想了好久,最后发现了一个问题,如果是先判断当前下标是否标记的话,则需要将数组的大小开...

2018-07-26 16:45:46 147

原创 POJ 2251 Dungeon Master(BFS)

题意:有一个三维的迷宫,可以上下左右前后六种方式行走,每移动一格需要耗费一分钟,# 代表墙(无法到达的地方),S代表起点,E代表终点,问你能否从起点到达终点,如果能就输出耗费时间,不能则输出Trapped!分析:BFS裸题,只不过现在是在三维里面,可以走六个方向。#include&lt;map&gt;#include&lt;set&gt;#include&lt;cmath&gt;#...

2018-07-26 16:00:22 130

原创 POJ 1321 棋盘问题 (N皇后变形)

题意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。分析:这题其实就是N皇后变形,不懂N皇后的,可以参考这篇博客因为每一行或者每一列都只能放一个棋子,所以我们直接递归每一行,用一个数组标记每一列的访问状态,然后直接DFS就行了#in...

2018-07-26 15:24:56 410

原创 LOJ #6280 数列分块入门4

题目链接题意:给出一个长为  的数列,以及 n个操作,操作涉及区间加法,区间求和。1≤n≤50000分析:直接分块莽一波,题目要询问的是区间的和,用一个sum数组来维护每个块的和,对于每次区间更新,如果是在完整的块里更新的时候直接给该块打上一个加法标记,并更新每块的sum数组的值,用add数组来维护加法标记,如果是不完整的块,直接暴力修改每个块的值,且同时更新区间和的值,如果是完整的块,直...

2018-07-24 15:16:36 162

原创 LOJ #6279 数列分块入门3

题目链接题意:给出一个长度为 n 的数列,以及 n 个操作,操作涉及区间加法,求区间内小于某个值 x 的前驱(比x小的最大元素)1≤n≤100000分析:考虑直接用分块莽一波,设每个块的大小为√n,对于查询操作,不完整的块因为它的大小不超过√n,对于更新操作,对于两头不完整的块,直接暴力更新,用一个sum数组来维护完整区间内的加法标记,为了在完整的区间时能够快速访问到前驱,需要使得区间...

2018-07-24 15:04:22 261

原创 Hdu 3336 Count the string(kmp&&dp+kmp)

传送门题意:给你一个长度为 n 的字符串(1 &lt;= n &lt;= 200000),输出所有前缀出现的次数之和,然后mod10007的结果。分析:如果我们要把字符串的每一个前缀都拿去和字符串进行匹配的话,那么复杂度就是O(n),很明显是会TLE的,所以我们考虑其他方法。方法一:Next[j] = x 代表的是前j个字符中前缀和后缀的最大匹配长度是x,所以我们直接根据Next数组去...

2018-07-23 08:46:24 192

原创 Hdu 2594 Simpsons’ Hidden Talents(Next数组的应用)

传送门题意:给你两个字符串s1和s2,它们的长度不超过50000,问你s1的前缀和s2的后缀所能匹配的最大长度,如果无法匹配就输出0,否则就输出这个最大长度的序列,并输出它的长度。分析:拿到这个题感觉很简单,直接将s2字符串拼接到s1字符串后面,然后用Next[新串的长度]的值不就完了吗?这里注意一个地方,例如:s1:abcabc 和 s2:abc,照刚刚那种思路的话就会输出6 但我们很快...

2018-07-23 08:46:13 133

原创 POJ 2752(Next数组的应用)

传送门题意:给你一个字符串,要求你从小到大输出所有字符串中满足既是该字符串的前缀又是该字符串的后缀的子串的长度。比如:"alala"的前缀分别为{"a", "al", "ala", "alal", "alala"},后缀分别为{"a", "la", "ala", "lala", "alala"}。其中{"a", "ala", "alala"}是相同的,所以输出1,3,5。分析:首先一...

2018-07-22 14:57:24 195

原创 POJ 2406 Power Strings(Next数组的应用)

传送门题意:给你一个字符串,要求输出该字符串的最小循环节的个数,但是这里需要注意一个地方,如果这个字符串不是刚好由n个最小循环节组成那么就认为这整个字符串是一个循环节,这时输出这个字符串的长度。分析:Next数组的裸题(模板题),Next数组其实可以看成是一个保存了字符串的前后缀匹配信息的数组,Next[len]存的其实就是整个字符串的前后缀匹配信息,len-Next[len]代表的其实就...

2018-07-22 14:37:01 140

原创 Hdu 1358 Period(KMP Next数组的理解)

传送门题意:给你一个长度为n的(2 &lt;= N &lt;= 1 000 000)字符串,求字符串的所有前缀字符串中字能刚好由k(k&gt;1)个循环节构成的字符串,输出这些k。分析:由于题目要求k最大,那么其实就是求最小循环节,由于N很大很明显我们不能用暴力解决,我们想到Next数组其实是存了每个子串的前后缀匹配信息的,以i结尾的字符串它的最小循环节minPeriod的长度其实就是 i...

2018-07-22 14:27:01 132

原创 Hdu 3746 Cyclic Nacklace(KMP Next数组的应用)

传送门题意:给你一个字符串,问你最少还需要补多少个字符使得字符串构成循环。分析:这道题其实是考对Next数组的理解,Next数组其实可以看成是一个保存了字符串的前后缀匹配信息的数组,Next[len]存的其实就是整个字符串的前后缀匹配信息,我们记最小循环节是minPeriod,len-Next[len]其实就是这个字符串的最小循环节的长度,可以自己手动模拟一下,我们用len%minPeri...

2018-07-22 14:13:26 117

原创 Hdu 2087 剪花布条(KMP基础)

传送门题意:给你两个字符串问你其中一个字符串在另一个字符串中出现了几次。分析:这题显然用KMP做,不然很容易超时,其实这基本算是一个KMP模板题,如果不懂KMP是什么的,可以参考这里,我们先预处理模式串的Next数组,复杂度为O(M),然后根据这个Next数组让模式串和文本串匹配一遍,扫一遍的复杂度是O(N),所以总的复杂度为O(M+N)。#include&lt;bits/stdc+...

2018-07-22 13:18:57 146

原创 Hdu 1686 Oulipo(KMP入门)

传送门题意:给你一个长度为W的模式串(1 ≤ |W| ≤ 10,000)和一个长度为T的文本串(|W| ≤ |T| ≤ 1,000,000),问你这个模式串在文本串中出现了几次,注意样例里面的这一组样例AZA AZAZAZA 输出的是3而不是2,重复的也算一次。分析:显然根据HDU一贯的作风(套路),这题我们肯定不能用朴素的暴力匹配,那样的话,复杂度是O(M*N),肯定会超时,其实这题就是...

2018-07-22 13:12:15 145

原创 Hdu 1711 Number Sequence(KMP模板题)

传送门题意:给你一个长度为N的文本串(1 &lt;= N &lt;= 1000000),和一个长度为M的模式串(1 &lt;= M &lt;= 10000),如果文本串中不存在模式串就输出 -1,否则输出该模式串在文本串里第一次出现的位置,注意:这题输出的下标是从1开始的,所以数组下标要+1。分析:很明显这题我们不能用常规的暴力匹配,那样的话,复杂度是O(M*N),很明会超时,其实这题就是...

2018-07-22 12:59:05 122

原创 LOJ #6278 数列分块入门2

传送门题意:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的元素个数。 1≤n≤50000思路:我们考虑用分块莽一波,设每个块的大小为√n,对于查询操作,不完整的块因为它的大小不超过√n,两头的不完整的块我们直接暴力枚举,而对于完整的块,要在这个块中寻找小于每一个元素的元素个数的时候,我们直接用二分来查找,于是我们不得不使块内的元素是有序的,预处理...

2018-07-22 09:48:30 618

原创 LOJ #6277 数列分块入门1

传送门题意:给你长为n的数列,n次操作,操作涉及区间加法,单点查值。 1≤n≤50000思路:区间加法,单点查值,我们很容易想到用线段树或者树状数组做,但这里我们考虑用分块莽一波,我们用一个sum数组来维护每个完整的块里面需要加的值,每次更新到完整的块的时候就给该块的sum数组打上标记,我们假设每个块大小设为m,则有n/m个块,对于不在完整块里面的区间,就直接暴力更新,因为每个块的大小不超...

2018-07-22 09:46:45 174

原创 图论--链式前向星

我们存图的方式通常有邻接矩阵和前向星,邻接矩阵易造成空间浪费,前向星需要sort排序,复杂度是O(nlogn),所以效率不高,链式前向星是前向星的优化,它可以避免排序。以下是边的存储结构struct Node{ int to; int w; int next;}edge[maxn];edge[i].to表示的是第i条边的终点,edge[i].next表示的...

2018-07-19 09:58:18 737

空空如也

空空如也

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

TA关注的人

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