自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 3481 Double queue

有点谜的题目…不知道什么叫做双队列…维护了一个map水过了#include <map>#include <iostream>#include <cstdio>#include <iterator>using namespace std;int main(){ int n; map<int,int> m; while(scanf("%d",&n),n){

2015-12-29 14:06:42 283

原创 POJ 2001 Shortest Prefixes

题目要求要给所有字符串找一个最短的前缀,让能够根据这个最短的前缀与其他的字符串区别开,这里用一个字典树,每个节点记录相应字母出现的次数,在建立完字典树之后查询的时候遇到1或者字符串遍历到结尾的时候进行输出,比较容易的题目。#include <iostream>#include <cstdio>#include <memory.h>using namespace std;#define maxp

2015-12-29 14:03:23 233

原创 POJ 3735 Training Little Cats

刚开始看三种操作就有点像矩阵的基本行、列运算,觉得应该用矩阵,但是之前某次考试的时候用矩阵乘法超时了,而且一直没有用矩阵解决过实际问题,这次也算是长了姿势三种操作对应三种基本矩阵,在由于基本矩阵属于稀疏矩阵,因此可以用一个小的优化来加快矩阵乘法的运算速度(下面是a与b矩阵相乘得到c矩阵):for(int i=0;i<n;++i){ for(int j=0;j<n;++j){

2015-12-25 23:59:41 238

原创 POJ 2752 Milking Grid

这是数算期末的压轴题,一共只有9个人AC了,而且120+的WA… 看了一下觉得题目还是有点思路的,不过实际做起来还是贡献了无数的WA如果有一个块可以重复的话,那么这个块中的每一行和每一列都一定可以是重复的,因此用kmp算法求出每个行的最小覆盖长度和每一列的最小覆盖长度,然后分别求最小公倍数值得注意的是最小公倍数有可能大于r,c,因此在循环计算最小公倍数的时候应该额外判断一下。#include <i

2015-12-22 22:44:57 250

原创 POJ 2406 Power Strings

典型的用kmp求循环节的题目,套用模板即可~#include <cstdio>#include <memory.h>#include <cstring>#include <iostream>using namespace std;#define maxn 1000050char str[maxn]={0};int next[maxn]={0};int main(){ while(sc

2015-12-22 19:44:58 238

原创 POJ 1521 Jungle Roads

最小生成树的问题,数据量比较小,用dij算法,把所有路径的按照长度从小到大进行排列,设置一个并查集确定两个地点是否已经连接在一起了。P.S. Priority Queue有毒…#include <cstdio>#include <memory.h>#include <algorithm>#include <iostream>using namespace std;#define maxp 3

2015-12-22 19:02:51 264

原创 POJ 2002 Squares

之前没怎么做过这种几何的题目,这次通过这道题也是知道了一些简单的做几何题目的思考方向,本题就是在一大堆点中找正方形,值得注意的是正方形有可能是斜着的= = 大体思路是对点进行枚举,先按照横纵坐标从小到大的顺序排序,然后对点进行两两配对,以配对的两个点为基准,找另外两个点在不在我们的点集里面。现在的问题就在于如何确定另外两个点在哪里,画一个草图以后我们可以看到已知两个点,确定一个正方形有两种可能,但是

2015-12-21 23:35:02 214

原创 POJ 1936 All in All

比较水的题目,对两个字符串都进行一次遍历,看看能不能对应起来,比kmp要简单的多#include <iostream>#include <cstdio>#include <memory.h>#include <string.h>using namespace std;#define maxn 100050int main(){ char str1[maxn],str2[maxn];

2015-12-21 21:42:04 270

原创 POJ 2823 Sliding Windows

这次是要求连续变化区间内的最大值和最小值,我维护了一个map就ac了… 不过听别人说可以维护一个单调队列,但是效率也并没有高很多 == 线段树应该是也可以的,不过线段树可能更适用于任意区间的查询、有空再研究单调队列好了~#include <iostream>#include <map>#include <cstdio>#include <iterator>using namespace

2015-12-21 20:46:36 250

原创 POJ 3250 Bad Hair Day

这道题提供了一个特别新奇的思路,单调栈! 今天刚考完数算实习,跪得一塌糊涂,满脑子都是线段树树状数组,考完试周围的竞赛爷一直在讨论什么kd树,什么状态压缩什么的完全听不懂,我还是默默准备我的数算考试吧。单调栈就是维护一个单调的栈,我们在本题中要求的不是每一头奶牛能看到多少个头,而是每个奶牛的头会被多少其他的奶牛看到,因此我们每次读入一个高度,就与栈顶的数字进行比较,如果比栈顶数字大,那么就一直弹出

2015-12-21 20:20:12 273

原创 POJ 2182 Lost Cows

趁热来一发线段树,主要是联系一下线段树的基本操作,写了两道题之后确实感觉手感好了很多,这道题的思路是,从后向前挨个数,最后一个牛总是可以判断是第几个,然后就把相应的位置占住,以后再数的时候就不能数已经占住的位置了,说的不是很清楚,但是代码的思路比较清晰:#include <iostream>#include <cstdio>#include <memory.h>using namespace

2015-12-20 15:09:21 254

原创 POJ 2481 Cows

这道题是要求e更大且s更小的牛的数量,首先把所有的数据读入之后按照e从大到小,e相同的情况下s从小到大的顺序来排列;从头开始遍历,这样能够保证e一定比前面的小,只要数前面有多少个s比自己的s小就可以计算出来有多少牛比自己更强,这种每次都要遍历数前面有多少个s比自己小的题目最好使用树状数组,能够更快地检索。#include <iostream>#include <cstdio>#include <

2015-12-18 13:13:13 162

原创 POJ 2492 A Bug's Life

老样子,经典的并查集题目,和Find them,catch them几乎一样的做法,只不过增加了一个判断,在两个结点的父节点相同的时候判断一下他们俩的新关系和原有的关系是否有矛盾;另外注意即使有矛盾也不能提前跳出循环,因为还有很多数据要输入= =#include <iostream>#include <cstdio>#include <memory.h>using namespace std;

2015-12-17 16:33:11 195

原创 POJ 2299 Ultra-QuickSort

这个题目的本质是求一个数组的逆序对的数量,在线性代数里面一个求逆序对数量的方法是,每次取所有剩余数字当中最小的数,然后数一数这个数前面有多少已经取出来的数字,即为当前这个数字所贡献的逆序数,所以本题就要模拟这个过程,排序之后每次取出最小的数然后开始数但是直接的模拟会导致超时,因此采用树状数组对已经取出来的点的个数进行记录,每次求和然后更新注意用long long 存储最后的答案#include <i

2015-12-17 14:27:07 295

原创 POJ 1875 Binary Search Heap Construction

本题实现的是treap的结构,从key的角度来看是一个BST,从priority的角度来讲是一个heap,如果用treap的定义,每次插入进行旋转,这道题会超时,因此先针对key进行排序,排序好之后再按照顺序插入到treap中。这里一个小技巧是,将treap[0]的位置的priority置为INT_MAX,这样保证无论treap结构如何变化,根节点总是treap[0]的右孩子,防止根节点变化带来的麻

2015-12-16 20:02:55 299

原创 POJ 3261 Milk Patterns

继续练习后缀数组的题目,这次也是比较经典的题型,求出来的重复k次的子串可以重叠,求height数组之后,计算连续的一片区域使得height[i]都大于k再记录几个易错点: 1、在原始的数组后面要补充一个数字0,不然的话计算后缀数组的时候会出现问题,同时数组长度会变成n+1,因此在计算后缀数组的时候参数输入的时候要注意+1; 2、在check函数当中,发现第一个大于k的height[i]时,计数器

2015-12-10 17:47:26 229

原创 POJ 1703 Find them, Catch them

并查集的经典题型,一共有两种操作:两个案件AB不是同一个团伙,询问AB是不是同一个团伙作案我在结构体中定义两个元素,一个记录其父节下标,另一个记录其与父节点的关系,如果是同一个组织那么就记为0,否则记为1,在进行带路径压缩的查找父节点操作的时候可以用异或运算来计算节点与根节点的关系。利用这种思路也可以解决另一道叫做“食物链”的题目#include <memory.h>#include <iostr

2015-12-10 17:28:33 288

原创 POJ 3080 Blue Jeans

作为后缀数组的练习题,更好地理解后缀数组的用法,来写了这道题,应该是比life forms那道题更简单一点,整个程序结构和那道题几乎是一模一样的,这次更好地理解了check函数里面一些细节,比如记录位置变量i经常会在循环里面++了一次,下面在进行处理的时候就要人为地-1,这道题还是挺简单的,对后缀数组的用法又加深了印象。#include <stdlib.h>#include <cstdio>#i

2015-12-08 17:52:13 233

原创 POJ 1610 Quad Trees

又是一周数算实习,马上就要上机考试了整个都要不好了,还好这一次的四分树作业给了我一丢丢的信心…作业是禁止使用STL的,而且明确要求必须用空间数据结构,所以这道题本来可以用广搜写的很简单,但是为了满足作业需求我还是使用了四分树,并且用数组模拟了队列进行广搜,直接用队列广搜会有更好的效果。总体思路就是根据每个区块的特点去建立一个四分树,四分树的每个结点就代表这一个区块的特性,如果state1的值为1,就

2015-12-08 13:44:38 493

原创 POJ 3294 Life Forms

老实说跑过来写博客是很惭愧的…毕竟没有靠自己的能力解决这道题…代码的关键部分也是借鉴了同学的,但是毕竟还是花了我3个小时的时间来调试,所以还是来稍微记录一下以免以后再忘记。本周的学习内容是传说中的后缀数组,本来是试图弄明白后缀数组是怎么求出来的,在研究两位大神的论文无果之后,决定还是退而求其次研究研究后缀数组怎么用,模板什么的大不了下功夫先背下来等以后有了更深的体会以后再拿来研究研究。后缀数组就是把

2015-12-07 21:43:09 256

空空如也

空空如也

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

TA关注的人

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