自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fcbruce

——The code will never betray me.

  • 博客(118)
  • 资源 (1)
  • 收藏
  • 关注

原创 POJ 1625 Censored!(AC自动机,DP)

题意:给出一n种字符的字典,有k个禁用的单词,问能组成多少个不同的长度为m的合法字符串。分析:构建出AC自动机后在里面走m步有不经过单词结点有多少种方案,用dp[i][j]表示走了i步到第j个结点的方案数,根据计数原理可得状态转移方程:dp[i][j]=sum(dp[i][last_j]),其中last_j表示能走到j结点的前趋们,j不为单词结点。要注意此题要用到高精度,而且要用unsigned char存储。

2014-11-20 15:19:12 1504 1

原创 HDU 2825 Wireless Password (AC自动机,DP)

题意:给出m个模式串,要求构造一长度为n的文本串,至少包括k种模式串,求有多少种可能的模式串。分析:m个模式串构建AC自动机,然后要在这AC自动机中走n步,至少经过k个单词结点。因为m<=10,显然可以用状压表示已经有哪几个单词结点。用dp[i][j][k]表示走了i步到AC自动机中的第j个结点,单词状态为k,由计数原理可推出状态转移方程:dp[i][j][k]=sum(dp[i-1][last_j][last_k]),last_j表示可以抵达第j个结点的上一个结点,last_k表示上一步的状态;因为

2014-11-20 11:19:33 1621

原创 SPOJ 962 Intergalactic Map (网络最大流)

题意:给出一张无向图,要求从1先走到2,再从2走到3,且每个点至多经过一次,问是否可能。分析:每个点至多经过一次,显然往网络流上靠,非常明显的拆点。但是要求从1走到2,再从2走到3,显然不太好处理。因为每个点最多经过一次,所以从1走到2的路径与2走到3的路径显然是完全不同的两条路径,而且还是无向图,那么不妨考虑从2出发找两条不同的路径分别走到1和3。这样建图就呼之欲出了:s->2,容量为2;1->t,3->t容量均为1,图中所有边容量均为1,在此图中跑最大流即可。要注意的是输入中不在区间[1,n]内的

2014-11-19 20:42:07 1559

原创 POJ 3691 & HDU 2457 DNA repair (AC自动机,DP)

题意:给出N个模式串和一个文本串,问最少修改文本串中多少个字母使得文本串中不包含模式串。分析:N个模式串构建AC自动机,然后文本串在AC自动机中走,其中单词结点不可达。用dp[i][j]表示文本串第i个字母转移到AC自动机第j个结点最少修改字母的个数,状态转移方程为dp[i][j]=min(dp[i][j],dp[i-1][last]+add),last表示j的前趋,add为当前点是否修改。由于第i个只和第i-1个有关,所以可以使用滚动数组来优化空间。

2014-11-18 12:14:07 1480

原创 HDU 4057 Rescue the Rabbit (AC自动机+DP)

http://acm.hdu.edu.cn/showproblem.php?pid=4057Rescue the RabbitTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1482    Accepted Submis

2014-11-14 22:01:58 1346

原创 HDU 1978 How many ways (DP,计数)

http://acm.hdu.edu.cn/showproblem.php?pid=1978How many waysTime Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3022    Accepted Submission(s

2014-10-30 11:27:08 1026

原创 HDU 2870 Largest Submatrix (单调栈)

http://acm.hdu.edu.cn/showproblem.php?pid=2870Largest SubmatrixTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1569    Accepted Submissi

2014-10-26 00:47:32 1367

原创 HDU 5071 Chat(2014鞍山B,模拟)

http://acm.hdu.edu.cn/showproblem.php?pid=5071ChatTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 702    Accepted Submission(s): 163

2014-10-25 11:11:38 1667

原创 探寻C/C++中更快的大数(自然数集)模板

本文系fcbruce个人原创整理,转载请注明出处http://blog.csdn.net/u012965890/article/details/40432511,谢谢!我们知道在C/C++中int型可处理-2^31~2^31-1(32位及以上编译器),long long型可处理-2^63~2^63-1的数据,这实际上是非常有限的,在很多情况下,我们往往会处理范围更大的数据。Java中有BigInteger类,python中想要多大就有多大(取决于内存),但是C/C++就显得有些乏力,这时候我们会

2014-10-24 20:52:46 1724

原创 POJ 2762 Going from u to v or from v to u?(强联通,拓扑排序)

http://poj.org/problem?id=2762Going from u to v or from v to u?Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 14573 Accepted: 3849Description

2014-10-14 15:30:13 1130

原创 POJ 2186 Popular Cows (强联通)

http://poj.org/problem?id=2186Popular CowsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 23819 Accepted: 9767DescriptionEvery cow's dream

2014-10-14 15:20:03 1139

原创 ZOJ 3826 Hierarchical Notation(2014 牡丹江 H,字符串模拟)

题意:模拟python的字典。给出一个字典,然后有1000个查询,输出对应的键值。分析:简单粗暴的字符串神烦模拟。因为打的网络同步赛,内存限制得很死,采用了离线操作。抓住这几个关键的符号:‘{’ '}' ',' ':' 进行操作。具体见代码及注释,数据不是非常恶心。

2014-10-12 17:42:32 2381

原创 UVALive 6485 Electric Car Rally (BFS,优先队列)

题意:给一张无向图,中午12:00从0点出发(充满电,支持240分钟的路程),在每个点都能充电,充2分钟的电能跑1分钟,每条路按分钟分为若干个时间段,每个时间段内通过这条路的时间为ti,问到达n-1号点最少要多少时间。分析:BFS+优先队列。按时间优先出队,要注意将电量的存储*2(当然有其他方法),因为如果充电时间为奇数,用int存会丢失0.5。其次是要跑两个周期(两天)。判重的话有很多方法,较普遍的是开两维,位置和剩余电量,我的方法是开一维松弛,将电量化为0(x.time-x.power)。要小心的

2014-10-07 17:13:55 2083

原创 HDU 4786 Fibonacci Tree(生成树,YY乱搞)

题意:给出一个无向图,每条边都已染色(黑/白),问是否存在生成树,该生成树的白色边的数量是正的fibonacci数。分析:所给数据中黑边为0,白边为1,那么生成树的白边数量即为生成树的权和。然后YY了一个做法:求其最小和最大生成树,如果在这个范围内存在fibonacci数则存在。靠谱的证明方法一直没想出来,这里随便解释下:对于任意一颗非最大生成树,一定可以取一条白边换一条黑边使其仍然是一颗树。

2014-10-06 20:34:57 1144

原创 HDU 4781 Assignment For Princess(YY乱搞)

题意:要求构造一张n个点m条有向边的图,满足如下条件:每对点间最多有一条边;没有自环;从任意一点出发,可以到达其他所有点;m条边的权值为1,2,3,...,m,所有边的权值都不同;从任意一点出发,最后要回到该点;所有回路的权值和为3的倍数。分析:随便YY下就行了。先构造1->2->3->4->...->n->1的环,边权依次为1,2,3,4,...,n;然后调整权值为n的边(当然也可已调整其他的边,这里只是为了方便),使得该环的权值和为3的倍数。然后按模3的余数对于剩下的边权分类,对于任

2014-10-06 20:22:38 1315

原创 UVA 11488 Hyper Prefix Sets (Trie)

题意:给出N个字符串,要求选出若干个,使得选中的字符串的公共前缀长度与选中字符串的个数的乘积最大。分析:简单粗暴的Trie模板题。对于Tire中的每一个结点添加两个信息:该结点的深度及该结点杯访问的次数,最后求出这两个信息的最大值就行了,边加入字符串边维护就行。

2014-10-04 21:44:59 1145

原创 HDU 2896 病毒侵袭 (AC自动机)

http://acm.hdu.edu.cn/showproblem.php?pid=2896病毒侵袭Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11796    Accepted Submission(s): 3067

2014-10-04 20:14:19 1063

原创 UVA 10679 I love Strings!!!(AC自动机)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1620题意:给出一个文本串和若干个模式串,问模式串是否在文本串中出现过。分析:简单粗暴的AC自动机模板题,要注意模式串可能有重复的情况。/* * * Aut

2014-10-04 18:54:18 1506

原创 AC自动机模板

AC自动机,继承自Trie

2014-10-04 18:45:50 659

原创 Trie树模板

Trie树,包括插入查找

2014-10-04 14:19:47 1302

原创 SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)

题意:有三种操作:将区间中的所有数置为x;将区间中的所有数加上x;求区间内所有数的平方和。分析:先考虑如果不需要求平方和,只是求和,我们需要维护这些数据:addv-区间内的数共同加上的值;setv-区间内的数都置为的值(setv=INF表示不设置);sumv-区间内的数加上addv之前的值。但这题求的是平方和,似乎不是很好维护。如果只是set操作,还是很好维护的,那么难点就在于add操作了。考虑如下等式:(x+v)^2=x^2+2xv+v^2,x是add操作之前的数,v是add的数,这是一个数的情况

2014-10-03 17:14:15 2024

原创 UVALive 6663 Count the Regions (离散化,染色,dfs)

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4675题意:二维平面内给出若干矩形,平面被矩形的边分为若干个区域,求一共有多少区域。分析:由于矩形只有50个,离散化后的平面大约是100*100的。不妨对于每个矩形覆盖

2014-09-26 00:28:55 1417

原创 HDU 4419 Colourful Rectangle (线段树扫描线)

题意:给出R,G,B三种颜色的矩形的数据,求最后7种颜色(R,G,B,RG,RB,GB,RGB)的面积是多少?分析:显然的线段树扫描线,可以说这题非常考验对线段树扫描线的理解,如果只会用模板,恐怕很难做出来。R,G,B三种颜色最后会产生7种颜色(无色不算),可以预见本题对编码质量要求相当之高。update()操作和一般的线段树扫描线并无太大的不同,本题的精髓在于query()!一般的简单扫描线甚至不用写query,因为根结点维护的区间覆盖长度就是我们所需要的。但是本题需要从复杂的信息中分出7种信

2014-09-24 02:03:27 1926 1

原创 HDU 5033 Building (单调栈)

题意:给出N幢摩天大楼的位置和高度,有Q次查询,问在某点处能看见天空的角度范围。分析:一开始的想法是维护一个单调栈,首先离线数据并排序,然后左右扫两边。单调栈内大楼的高度要递减,然后判断栈顶元素是否比它的前一个更优,如果不是则出栈。但是如果栈顶元素比它前一个优,并不能保证是全局最优的。正确的维护方法是保证单调栈内的大楼高度递减,而且要使得这些大楼的最高点构成一个类似凸包的形状,或者说是凸包的一部分,然后再判断栈顶元素和它前一个比是否更优,如果不是则出栈。这样最后的栈顶元素就是待查询点在某方向的视角最

2014-09-21 21:32:37 1470 1

原创 UVALive 6459 Infinite Go (模拟,搜索)

题意:有一个1->INF*1->INF的围棋棋盘,给出双方的落子,求最后双方剩余棋子的数量。分析:又是一道大力出奇迹的题,直接裸的搜索就行。每走一步就搜索该点和它周围4个点影响的联通块,如果没有气就删掉。但要注意先搜它周围4个点再搜它自己,反过来虽然也能AC,但这是不对的。

2014-09-06 20:13:14 1144 1

原创 UVA 10746 Crime Wave – The Sequel(费用流)

题意:有m个警察,派n个警察到n个银行,给出每个警察到各银行的时间,求最小的平均时间。分析:平均乘上n就是总时间,也就是要最小化总时间,那么用费用流就可以解决问题。各银行向每个警察连边,容量1,费用为时间;增加源点,源点向各银行连边,容量1,费用0;增加汇点,警察向汇点连边,容量1,费用0。在图中跑费用流就行。这题最恶心的地方在于保留小数,结果加上eps再输出。这里涉及到保留小数方法,是用传统的四舍五入还是用银行家舍入?都不知道以后涉及到小数的输出要怎么搞了,这种东西就该spj啊。

2014-09-05 23:15:41 1152 1

原创 UVA 563 Crimewave (最大流,拆点)

题意:有若干罪犯抢银行,要求逃出地图时他们的路线不相交,求是否能达到上述要求。分析:路线不相交即每个点每条边只能用一次,即容量为1,点上的流量限制拆点即可。源点连向罪犯所在位置的入点,最外一圈的出点连向汇点,满流即可能。

2014-09-04 22:12:28 1205 1

原创 UVA 11045 My T-shirt suits me (二分图)

题意:有n(n是6的倍数)件衣服,6种尺码,每种尺码的衣服数量相同,有m个人,每人有两种能穿的尺码,问每个人是否都有衣服穿。分析:显然的二分图。每个人向其合适的尺码连边,容量为1;增加源点和汇点,源点向每个人连边,容量为1,每种尺码向汇点连边,容量为该种尺码衣服的数量(n/6)。在上图中跑最大流,如果满流则所有人都有衣服穿。

2014-09-04 21:09:34 1502 1

原创 UVA 10801 Lift Hopping (最短路)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1742Problem ?Lift HoppingTime Limit: 1 secondTed the bellhop: "I'm coming up and if t

2014-09-03 17:57:43 1112 1

原创 HDU 4027 Can you answer these queries? (线段树)

题意:给出一排敌军的血量,每次攻击都能将范围内的敌军血量变为原来血量的算术平方根(下取整),并询问范围内敌军的血量和。分析:显然的线段树,但是似乎不太好设计lazy标记啊,我们想一想算术平方根,sqrt(1)=1,且64位整数范围内最多6次就变到1了,那么只要区间内的数都为1,我就不用更新这个区间了,所以每次更新都更新到叶子结点,维护区间和就行了。数据里没有0,不过X>Y这种trick有意思吗?

2014-08-27 19:26:16 1536 1

原创 HDU 3255 Farming(线段树求体积并)

你家种一年地的收成暴int!你当是《日人民报》啊!题意:雇佣贫农种地(所以是地主喽),每个农民带一种种子,播种在他管理矩形区域,每个单位面积种一粒,区域可能会重合,那么收成高的那粒会将其他的覆盖掉,求最终收成。分析:一开始想的是二维线段树set,但是看到面积有sqr(10^6),即使离散化也有sqr(3*10^4),后来想到加权的线段树扫描线求面积并,但是发现覆盖种子不好维护,后来看到别人题解标题:线段树求体积并。把价格看成高度,那么每粒种子的高度区间就可以看成[0,price),想像一下,这些"

2014-08-27 16:09:56 1330 1

原创 Thinkpad X200 换屏记

妈蛋,前几天屏幕废了(闪屏->昏暗->变黑),于是只能外界机房的显示器作为一个计(xiu)算(dian)机(nao)学院的学生怎能被这点小事难倒,果断去某宝买了一块AFFS屏幕(我不是来打广告的),货到了过后果断换之。。。。换前swaping......testing.....that's OK!哈

2014-08-24 20:31:33 8706 1

原创 ZOJ 1859 Matrix Searching(二维线段树)

题意:给出一个n*n的矩阵,有m次询问,求每次询问子矩阵中的最小值。分析:显然二维线段树随便乱搞搞就行了,线段树维护区域内的最小值。注意二维上的"pushup()"的写法,实际上也是要维护一棵线段树。

2014-08-24 13:29:00 1165 1

原创 HDU 4973 A simple simulation problem.(线段树)

题意:初始给出1-n的序列,有两个操作:D l r,将[l,r]区间的每个数都复制一个;Q l r,询问[l,r]区间内最多的相同数字的个数。分析:显然的线段树,但是这个序列的长度会因为D操作变化,即线段长度变化。通过观察发现这个序列永远是sort过的,那么我们只要维护每个数的数量,操作前找到l和r的位置,然后再单点更新、成段更新,成段询问,线段树的综合应用。

2014-08-24 11:52:07 1322

原创 HDU 4971 A simple brute force problem.(最小割,最大权闭合图)

题意:给出n个项目,m个问题,完成某个项目需要解决一些问题,解决某个问题可能要先解决另一个问题,比如问题i依赖于问题j,那要先解决j再解决i,如果互相依赖,则要同时解决。完成某个项目会获得收益,解决某个问题需要一些花费,求最大净收益。分析:一点开题就感觉是个网络流,不过一直没想到该怎么建图,后来队友切了签到题发现这题其他队过得有点快,就感觉应该是个乱搞的搜索(当然,乱搜确实能过),后来看到一道做过的网络流就很高兴地去切了,切完后我又想了下这题,发现就是个最大权闭合图,幸好以前做过一道,并且还记得建图的

2014-08-22 20:14:25 1222

原创 HDU 4975 A simple Gaussian elimination problem.(网络最大流)

出题人是个蛤粉,蛤蛤蛤蛤蛤蛤蛤蛤蛤。。。。题意:每个格子只能填0~9这10个整数,给出行和及列和,求是否有合法方案,如果有并判断唯一性。分析:看到这题就感觉熟悉啊,和之前某场多校的题目是一样的,当初还不会网络流呢,现在虽然还不会建图,但是套套模板还是没有问题的。建立二分图,行为X部,列为Y部,每个X部的点向Y部连一条容量为9的边,增加源点S,S向X部的所有点连边,容量为行和,增加汇点,每个Y部的点向汇点连边,容量为列和,在该图中跑一边网络最大流,如果满流则有合法方案。然后在残留网络中找环(不要立即

2014-08-22 19:32:08 1414

原创 POJ 2482 Stars in Your Window(线段树扫描线)

题意:背景真是令人感动,我都看得哭了......前面的自己看吧。给出星星的坐标和亮度,给定一个矩形(长/宽),求框住的星星亮度和的最大值,恰好在边上的不算。分析:一个月前在上海邀请赛就有这样的题,当时我线段树只会成段更新,所以那道题目也没碰...我们这样想,每个星星能影响的范围就是给定矩形的面积,为方便起见,不妨设星星的位置为矩形的左下角。那么在这个范围内的点全部加上它的亮度,最终我们就是求该平面内的最大值。这样的话就要用到二维线段树...可是有10k颗星星...这要开多大的数组啊.....

2014-08-22 18:57:00 2474

原创 HDU 4819 Mosaic(二维线段树)

题意:给出一个图片,分成N×N个单元格,有M次操作,每次操作将(x,y)的值变为以(x,y) 为中心L(L为奇数)为边长的区域内的最小值和最大值的均值(floor((maximum+minimum)/2)),并输出该值。分析:明显的二维线段树的单点更新和区间查询,维护最值。更新肯定是先在二维内找到叶子节点的那棵线段树,然后再在这棵树上更新,这部分很简单,就想成一维的写。但是这毕竟是二维线段树,二维的部分也需要维护,当然这部分比较麻烦,我们先想一想一维的:一维的节点维护的是值,我们只要根据它的左右儿子

2014-08-15 10:39:09 1475

原创 POJ 3026 Borg Maze & UVA 10307 Killing Aliens in Borg Maze(BFS,最小生成树)

题意:给出一个迷宫,‘#’是墙壁,‘ ’(空格)可走,‘S’是起点,‘A’是目标,一个群体从S点开始,每次可以走周围相邻的4个格子,走到某个目标的花费是从上一个目标(或起点)开始计算的步数,群体可且仅可在S或A出分成若干个(可以看成是无数个,即使在同一个格子中)群体。比如从S开始走5步到A1,在A1分成两个群体,其中一个到达A2走3步,另一个到达A3也走3步,那么总花费是5+3+3=11。求到达所有A的最小花费。分析:题意很难理解,其实就是个最小生成树,用BFS在平面内模拟prim算法即可,这里要用到

2014-08-11 16:34:55 1091

原创 gedit变身为编程利器的简单配置

本文由fcbruce个人原创整理,转载请注明出处:http://blog.csdn.net/u012965890/article/details/38472149。>_<用了Linux有半年多了(ubuntu->debian),之前敲代码都是通过IDE来编译运行,一直有转Vim的想法,可是那玩意太高端,暂时玩不过来。前两天发现gedit加上各种插件简直就是神器,这两天一直在抽空配置,试用了下,感觉很爽,哈哈哈哈哈哈哈,下面来分享下我的心得。>_<操作系统:Debian 7.5 (wheezy)

2014-08-10 20:15:26 49153 4

DEV-CPP 5.4.2

Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。Dev-C++是NOI、NOIP等比赛的指定工具,缺点是Debug功能弱。Dev-C++ 最新版本:5.5.3。 Dev-C++使用MingW32/GCC编译器,遵循C++ 11标准,同时兼容C++98标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大 利语等二十多个国家和地区语言提供选择。该软件采用 Delphi 开发。

2013-12-12

空空如也

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

TA关注的人

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