自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poj 1988 Cube Stacking

poj 1988 Cube Stacking题意:和银河英雄传说类似,可以参考黑书其实题目并不难,最开始没想到可以存储上面有多少个。想到直接去求下面有少个,发现好像很暴力。/* * File: main.cpp * Author: Mi * * Created on 2011年6月19日, 下午8:55 */#include #include #i

2011-06-19 21:39:00 849

原创 poj 2318 TOYS

题意:有一个矩形的盒子,有一些隔板,问在每个隔出来的空间内的玩具有多少个。思路:其实就是判断这个点在那一个四边形里面。开始想到用面积去做不知道为什么错了。其实用另一种想法更简单,就是判断这个点那条线段的左边。直接二分就可以了。/* * File: main.cpp * Author: Mi * * Created on 2011年5月12日, 上午8:59 */#include #include #include #include #include #inc

2011-05-12 10:27:00 687

原创 poj 1066 Treasure Hunt

<br />poj 1066 Treasure Hunt<br />题意:一个正方形的房间里有很多强,门在每条线段的中,要从一个起点到达最外面问要经过的最少的门。<br />思路:其实是一个很简单的计算几何题目。把问题转换一下,虽然说门在中点,但是如果要经过这个门,必然要与这条线段相交。这样就变成了判断线段相交的问题。只用枚举,起点到终点(边界上的每一个点)与每条线段的交点个数的最小值。<br />/* * File: main.cpp * Author: Mi * * Created

2011-05-11 21:16:00 787

原创 poj 1981 Circle and Points poj 2693 Chocolate Chip Cookies

<br />题意:两个题都是让你求一个半径给定的圆最多能框住多少个点。<br />思路:枚举任意两个点,当做圆上的点,现在已经知道两个点,和圆的半径,可以求出圆心,然后再枚举每个点到圆心的距离是不是小于半径,统计个数。求圆心的时候用到了一些简单的解析几何的知识。都是很基础的。<br />两个题代码差不多我只贴1981的:<br />/* * File: main.cpp * Author: Mi * * Created on 2011年5月6日, 下午10:38 */#incl

2011-05-06 22:46:00 1579

原创 poj 1556 The Doors

<br />1556 The Doors<br />题意:有一个房间,中间有一些墙,每堵墙上有两个门,问从起点到终点的距离。<br />思路:要使距离最短,如果中间没有被挡住,直接一条线段。如果被挡住那么走得位置肯定是被挡住的端点。把每个端点当成一个点,然后求出任意两个可达端点之间的距离,再用dij就可以了。开始居然没想通怎么建图。其实很简单,<br />/* * File: main.cpp * Author: Mi * * Created on 2011年5月4日, 下午2:37

2011-05-04 15:09:00 957

原创 spoj 694 Distinct Substrings 705 New Distinct Substrings

<br />spoj 694 Distinct Substrings<br />705 New Distinct Substrings<br />题意:这两个题都是给你一个字符串让你求不相同的子串的个数。<br />思路:因为没个子串都相当于这个字符串后缀的前缀,所以题目转换为求一个字符串所有后缀的不同前缀。<br />比如:ababab<br />saheightsuff<br />50ab<br />3      2abab<br />14ababab<br />60b<br />41bab<br />

2011-04-27 22:02:00 871

原创 poj 3261 Milk Patterns

3261 Milk Patterns题意:这个题和1743很类似,只是这个题可以求的子串重复,并且次数要大于等于k思路:还是利用height数组的性质就是两个排名相邻的两个后缀的最长瓜瓜前缀,如果要他们连续出现的只需要连续的height[i]的值都大于枚举的长度就可以了,因为这个题是可以重复的,所以没有必要去判断sa[i]-sa[i-1]>枚举长度。在枚举长度的时候还是用二分。/* * File: main.cpp * Author: Mi * * Created on 2011年4月

2011-04-27 20:06:00 559

原创 poj 1743 Musical Theme 后缀数组

poj 1743 Musical Theme题目:给一串音符,要你找出一段美妙音符,要满足下面三个条件。1.长度要大于52.没有重叠3.两个串中对应的元素的差值是一个定值 样例:124 5 6 7 8 509 10 11 12 13 14红色和蓝色的的差值为5,思路:其实这个题是求最长不重复子串,当然很容易想到后缀数组的height数组。直接用输入的这个数组显然是不行的,因为他们有个固定的差值。这个题需要转换一下,用后一项减去前一项,这么构造一个新的数组:1 1 1 1  42 -41 1 1

2011-04-27 12:05:00 675

原创 求最长可重复子串

<br />解法:后缀数组。<br />可重复子串必定是两个后缀的公共前缀。所以这里只需要找出height数组里的最大值就可以了。

2011-04-26 21:54:00 577

原创 poj 2774 Long Long Message

<br />poj 2774 Long Long Message<br />题意:求两个字符串的最长公共子串、<br />才开始学后缀数组,拿这个题来练了下手。在求sa的过程中理解基数排序的过程,对LHQ牛的模板理解就会更深入。<br />感觉da的实现没必要理解得很深,主要用的还是height数组。<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月25日, 下午8:33 */#include <stdio

2011-04-26 14:29:00 771

原创 poj 1204 Word Puzzles 字典树

<br />Word Puzzle<br />字典树实现<br />AC自动机实现<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月20日, 下午4:10 */#include <cstdlib>#include <stdio.h>#include <algorithm>#include <string.h>#define KIND 26#define MAX 10005using

2011-04-20 16:38:00 880

原创 poj 1204 Word Puzzles

 Word Puzzles题意:给一个l*c的字母矩阵,给一些单吃,去这个矩阵中找出这些单词的起始位置以及方向,方向按顺时针走,从上开始,分别用A,B,C...表示有8个方向。对ac自动机还是不熟悉啊,老是敲错。有些人超时应该是因为,每个点都去搜一次,其实不用,只用每行每列搜就可以了。/* * File: main.cpp * Author: Mi * * Created on 2011年4月20日, 下午2:57 */#include #include #includ

2011-04-20 16:02:00 741

原创 [HNOI2002]营业额统计 sbt

<br />什么玩意啊,数据都会有问题,最后一行居然没有,必须特判一下,不知道是什么出的数据<br />是一个基本的sbt用到了,Inser,Exist,Pred,Succ<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月17日, 上午10:55 */#include <cstdlib>#include <stdlib.h>#include <stdio.h>#include <string.h

2011-04-17 21:44:00 1695

原创 [NOI2004]郁闷的出纳员

[NOI2004]郁闷的出纳员<br />一个基本的sbt,开始太傻了,居然在删除人的时候我一个一个的去删,还以为很快,结果毫无悬念TLE。其实删除的时候只要T[t].key<mi了,那么就直接把整棵树都删掉<br />要知道有多少个人被开除了,直接tol-T[root].size<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月14日, 下午9:13 */#include <stdio.h>#incl

2011-04-17 09:14:00 2331

原创 poj 2761 Feed the dogs SBT

<br />Feed the dogs <br />查询一个区间上第k大的数,基本思路就是在sbt里只存要查询的区间上的数<br /> <br />先把要查询的区间按起点从小到大排序,这样就可以利用前一个区间上的数,i和i-1有重叠,那么就没有必要把i-1上的数全删除掉,这样可以快一点<br />我开始就没管直接全部删除,然后把i上的数全部插入结果毫无悬念超时。。。<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月1

2011-04-14 10:48:00 952

原创 Dynamic Query System 基本SBT

SBT神器啊,川大校赛出了个基本的SBT,他们搞的数据有点恶心,写了好几次都没过掉http://222.196.33.254/oj/showproblem?problem_id=1716这个是我们学院上的地址,不过好像只有教育网可以登感觉SBT就是size一个信息就可以解决n多动态查询问题了这个可以用来当做模板,自己写的代码可读性还是比较高/* * File: main.cpp * Author: Mi * * Created on 2011年4月13日, 下午7:51 */

2011-04-13 23:24:00 712

原创 poj 3481 Double Queue

<br />用这个题来练习了下SBT,感觉有点奇怪,set居然还快些,没搞懂<br />学sbt可以看陈启峰的论文http://wenku.baidu.com/view/364afa42a8956bec0975e3b1.html还是中文的,很简单<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月13日, 下午3:38 */#include <cstdlib>#include <stdio.h>#

2011-04-13 19:45:00 938

原创 Who's in the Middle

<br />http://poj.org/problem?id=2388<br />题目很简单。<br />拿来练习了下二叉堆<br />/* * File: main.cpp * Author: Mi * * Created on 2011年2月24日, 下午9:06 */#include <cstdlib>#include <stdio.h>#define N 10005using namespace std;/* * */int heap[N

2011-04-11 21:10:00 553

原创 hdu 3065 病毒侵袭持续中

<br />http://acm.hdu.edu.cn/showproblem.php?pid=3065<br />恶心的题目,其实是一个简单的ac自动机,最开始理解错了,我把不是大写字母的全都去掉了<br />其实只要在查询的时候判断一下就可以了,统计没什么就是不想普通的ac自动机那样统计过的词不统计,这个是还可以统计<br />/* * File: main.cpp * Author: Mi * * Created on 2011年4月1日, 下午5:26 */#inclu

2011-04-01 19:27:00 750

原创 hdu 2896 病毒侵袭

裸!只有一点要注意,就是这里面的字符串不只是字母,KIND 应该定义成128,我开始想都没想直接256,mle还有就是读的时候用gets,因为a aaa 这种也算中间有空格的,其它的就是题目说了病毒数不会超过三,所以最多输出三个我遇到的恶心的地方就这几个,注意到了应该就能ac了/* * File: main.cpp * Author: Mi * * Created on 2011年4月1日, 下午3:14 */#include #include #include #

2011-04-01 16:51:00 688

原创 fzoj 2005 Computer Virus on Planet Pandora 福州现场赛

<br />http://acm.fzu.edu.cn/problem.php?pid=2005<br />这题。。。不想说了,当时居然没把题目意思搞清楚<br />The length of the program is at least 1 and at most 5,100,000, no matter in the compressed format or after it is decompressed to original format.<br />这句话,我干,我想对出题人说,能不能

2011-04-01 16:48:00 1941

原创 hdu 2222 Keywords Search

现在正在学ac自动机,找了些资料看了下,其实也没有那么难,先多做些题,熟悉之后再写个专题这个题是一个裸的ac自动机,多敲敲,熟悉熟悉代码。/* * File: main.cpp * Author: Mi * * Created on 2011年3月31日, 下午5:14 */#include #include #include #define KIND 26#define MAX 500005using namespace std;/* * *

2011-04-01 16:35:00 525

原创 poj 2155 Matrix

<br />一个二维线段树的简单题,开始直接更新到了每一个节点,结果悲剧超时,想想也是,肯定会TLE<br />其实不用跟新每个节点,只用更新到那条线段,然后每次询问的时候也只用只用res^矩形的状态<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 下午2:55 */#include <cstdlib>#include <stdio.h>#include <algorithm>#def

2011-03-30 16:20:00 502

原创 hdu 1823 Luck and Love

<br />这个题是一个理解二维线段树的好题,其实二维线段树不难<br />先建立一颗线段树,然后每个节点下又有一个线段树,看看代码很容易理解的,以前总不想去看<br />先查找身高符合要求的,然后再查找活泼值符合要求中缘分值最大的<br />代码很简单,只是比普通的线段树多了点<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 下午12:59 */#include <cstdlib>#incl

2011-03-30 14:45:00 703

原创 poj 2182 Lost Cows

<br />这个题和2828是一样的,如果不不懂的地方看http://blog.csdn.net/Euler_M/archive/2011/03/30/6287853.aspx<br />这个题只是没告诉你第一头牛应该插在那,很简单嘛,第一头牛前面肯定没有牛,所以p[1]=0<br />其它都和2828一样,思想都是反过来想,把pos变成前面有多少个空位<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 上

2011-03-30 10:30:00 494

原创 poj 2828 Buy Tickets

<br />一个很好的线段树应用的题!<br />题意:有一些人去买票,但是后来的可以插队,插到自己想插的pos。<br />思路:反过来看,pos就变成了前面有多少个空位,这样就可以用线段树了<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月30日, 上午9:47 */#include <cstdlib>#include <stdio.h>#include <algorithm>#define

2011-03-30 10:09:00 626

原创 poj 3368 Frequent values

题意:给你n从小到大的树,查询一个区间的最长的连续长度思路:离散化,转换成rmq问题其实这个题会有三种情况(红色表示你要查询的段)1:-1 -1 11 1 1 3 3 3 3 10 10 10就是你要查询的段,刚好是完整的一段就是只有一个值,那么就是b-a+12:-1 -1 1 1 1 1 3 3 3 3 10 10 10查询区间包含了两段,答案就是这两段最长的一段3:-1 -1 1 1 1 1 3 3 3 3 10 10 10也是最麻烦的一种就是包含了多段,这也是这个题转换的关键我们可以先

2011-03-29 21:50:00 548

原创 poj 1226 Substrings

<br />题意:就是求n个字符串的最长公共子串,子串是可以反转的<br />思路:strstr,kmp爆搜,还可以用后缀数组<br />实测kmp比strstr快,16ms那个是后缀数组的8389284Euler_M1226Accepted368K141MSG++1911B2011-03-28 16:44:598389280Euler_M1226Accepted364K63MSG++1907B2011-03-28 16:44:197957084Euler_M1226Accepted508K16MSC++2

2011-03-28 16:53:00 1156

原创 poj 3080 Blue Jeans

<br />水题,枚举第一个字符串的所有子串,然后去和其他的串匹配,其它地方没什么好多说的,有些细节的地方没注意搞得我wa了好几次。郁闷<br />要注意输出的是字典序小的,这代码写得太丑了<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月27日, 下午7:02 */#include <cstdlib>#include <stdio.h>#include <string.h>using name

2011-03-27 20:41:00 470

原创 poj 2406 1961 简单证明

<br />都是一个类型的题,1961是2406的加强版<br />下面举个例子来说明一下l/(l-next[l])就是重复次数<br />i          1 2 3 4 5  6  7<br />s:        a b c  c c  a  b<br />next:   0 0 0 0 0 1  2<br />l-next[l]=5,就相当于现在我们得到了s的一个子串:abccc<br />显然这里拿abcccab去除abccc的结果是 商1余ab是除不尽的,所以l%(l-next[l])!=0

2011-03-27 18:25:00 1052

原创 poj 2185 Milking Grid

<br />题意:就是给你一个矩阵,问你他能由一个矩阵一直重复得到。求这个矩阵的最小面积<br />这个题是1961 ,2406的加强版,我是用discuss里的方法做的,不懂的可以看看discuss里的方法。自己的思路感觉很乱。<br />最主要就是要理解一个字符串的最小可能重复前缀是l-next[l]。l是字符串的长度。<br />其实结合next的定义很容易想通,next[j]=k,指的是next[1....k]=next[j-k+1...j],那么j-next[j],剩下的就是他的最小可能重复前

2011-03-27 17:28:00 631

原创 poj 1177 Picture 线段树+离散化+线扫描

<br />惭愧啊,还是不怎么懂,主要是lcover,和rcover,看了很多解题报告都没怎么写清楚,看陈宏的论文,感觉自己理解到了,不过写不出代码,悲剧啊。看来是我的iq有问题~<br />下面这个人写的还可以:<br />http://www.cppblog.com/abilitytao/archive/2010/07/21/120927.html<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月24日, 下午

2011-03-24 19:48:00 587

原创 poj 2528 Mayor's posters 正确离散化

<br />理解线段树离散化的好题<br />关于这个题离散化的问题,在discuss里有人说测试数据是错的,如果按照一般的离散化的方法去写有种数据不能过<br />1 10<br />1 5<br />8 10<br />如果像我下面的代码那样写离散化的结果<br />1 4<br />1 2<br />3 4<br />很明显6-7这条线段在离散化时被消除了<br />如果想得到正确的结果其实只用在离散化时修改一下就可以了。<br />如果这两条线段的两个端点是相邻的,cnt++<br />不相邻cnt

2011-03-20 11:51:00 919

原创 Light on or off

<br />一道曾经校赛的题目,也算是线段树的一道很好的题。<br />http://222.196.33.254/oj/showproblem?problem_id=1684<br /> DescriptionThere is N lights on the wall of Dreamone’s house from left to right.Initially,some lights on and some lights<br />off, and we use ‘1’ represented the

2011-03-18 14:30:00 829

原创 hdu 2871 Memory Control

<br />这个题和hotel很像,其中对vector的使用很巧妙,不过还有一点没弄懂,就是那个二分的写法<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月15日, 下午2:18 */#include <cstdlib>#include <stdio.h>#include <string.h>#include <vector>#define N 50005#define max(a,b)

2011-03-15 20:56:00 550

原创 poj 2892 Tunnel Warfare

<br />/* * File: main.cpp * Author: Mi *其实这个题得解法和3667的很相似,用lv,rv分别保存左边连续的个数和右边连续的个数 * 在询问的时候有一点要注意,if(x<=mid) 则要去判断x是不是在T[root<<1].rv中,其实判断的方式就是 * if(x>T[root<<1].r-T[root<<1].rv) 那么就可以说明x在rv中,return T[root<<1].rv+T[root<<1|1].lv因为这样的话 * 就会与

2011-03-15 14:08:00 506

原创 poj 3667 Hotel

/* * File: main.cpp * Author: Mi *关于这个题其实以前也做过一次这个题,但还有有些地方没有弄懂 * 这次又重新拿出来认真看了下,终于搞懂了,对线段树的认识有加深了一步 * 题目意思就不说了 * 分别用lv,rv,cv来表示线段左边剩余的房间数,右边剩余的房间,总共剩余的房间数 * state(0,1,-1)分别表示,没有人住,已经有人住,和其它情况,也就是说这条线段有一部分有人住,一部分没人住 * 比如11000111这么一条线段,1表示

2011-03-14 16:49:00 1131 3

原创 poj 2594 Treasure Exploration

<br />题目意思:就是给你一张有向图,问你最少需要多少个机器人去访问所有的点<br />思路:这个题是一个最小路径覆盖,但这个题里的点是可以走多次的,所以直接建的图还需要用floyd求一下传递闭包<br />/* * File: main.cpp * Author: Mi * * Created on 2011年3月10日, 下午2:56 */#include <cstdlib>#include <stdio.h>#include <string.h>#defi

2011-03-10 15:32:00 437

原创 poj 1274 The Perfect Stall

<br />一个裸的二分图最大匹配。这两天看了下匹配,以前一直以为很难,看了看,发现不是很难,很多题难的地方在于建图。要多做题,多学学不同的建图方式。#include <stdio.h>#include <string.h>#define N 305int map[N][90],pre[N];bool used[N];int n,m=85;bool dfs(int u){ int i; for(i=1;i<=m;i++) { if(!used[i]&&map[u

2011-03-09 14:32:00 453

原创 poj 2388 Who's in the Middle

<br />这个题很简单,可以用sort秒掉,但似乎是想考二叉堆排序。<br />用sort写了个居然是0ms,二叉堆也是0ms<br />/* * File: main.cpp * Author: Mi * * Created on 2011年2月24日, 下午9:06 */#include <cstdlib>#include <stdio.h>#define N 10005using namespace std;/* * */int heap[

2011-02-26 09:43:00 488

空空如也

空空如也

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

TA关注的人

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