自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

荒野孤鹰

广阔天地大有作为

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

原创 Thinking in Java---线程通信+三种方式实现生产者消费者问题

前面讲过线程之间的同步问题;同步问题主要是为了保证对共享资源的并发访问不会出错,主要的思想是一次只让一个线程去访问共享资源,我们是通过加锁的方法实现。但是有时候我们还需要安排几个线程的执行次序,而在系统内部线程的调度是透明的,没有办法准确的控制线程的切换。所以Java提供了一种机制来保证线程之间的协调运行,这也就是我们所说的线程调度。在下面我们会介绍三种用于线程通信的方式,并且每种方式都会使用生产者

2015-08-31 20:31:00 1678 1

原创 poj--1625Censored!+AC自动机上的dp+大数

题目链接:点击进入 其实看起来是完全可以用矩阵做的,但是因为用到了大数的,导致内存开不下,所以用dp写了。其实dp的过程依旧就是在我们用禁止出现单词构建的trie上走m步的过程。我们定义dp[i][j]表示走过i步以后到达节点j的方案数,则状态转移应该是dp[i][j]=sum(dp[i-1][k]),其中k表示可以走到j的节点,并且不能是病毒节点。但是其实这样代码就不是那么好写了,其实我们可以用

2015-08-25 13:28:59 901

原创 Thinking in Java--使用NIO实现非阻塞Socket通信

Java1.4提供了一种新的IO读取方式,称为NIO。NIO中使用了通道和缓冲器的概念,并且以块的形式操作数据,这样更接近操作系统IO操作的形式,提高了JavaIO的效率。NIO的核心类有两个Channel和Buffer。但是其实除了提升了基本IO操作的性能外,NIO还提供了非阻塞IO的功能。这里先介绍下阻塞IO和非阻塞IO的概念。考虑到应用程序发送出IO请求,如果这个IO请求会阻塞线程(就是线程停

2015-08-24 21:45:20 1557

原创 poj--2778DNA Sequence+AC自动机+矩阵快速幂

题目链接:点击进入 如果我们先将所有的病毒字符串构建成一棵trie,然后构建一个n长的字符串的过程可以看成是从这颗trie树根节点出发走n步的一个过程,为了不含任何的病毒,则在走的过程中不能经过任何的病毒节点。考虑只走一步的过程,则我们可以得到一个矩阵m[i][j],表示从节点i到节点j有多少种方式。那么这个矩阵的n次幂就是表示走n步的情况,然后也就可以得到答案了。 问题在于如何获得这个走一步方

2015-08-24 15:48:32 1287

原创 hdu--5418Victor and World+状态压缩DP

题目链接:点击进入 昨天晚上比赛的时候,我居然想着用dfs做这道题,果断超时了。其实因为城市的数量非常的小,n最大才12,所以我们是可以借助于二进制进行状态压缩的;定义dp[s][i]表示当前访问城市的情况为s时下一个访问城市为i时的最小油量,则转移方程为dp[s|(1<<(i-1))]=min(dp[s][j]+dis[i][j]),状态转移方程的意思就是从s中找到已经访问过的城市j,然后再从j

2015-08-23 17:28:38 705

原创 hdu-5384Danganronpa+多校训练+AC自动机

题目链接:点击进入 其实就是一个很简单的AC自动机的题目,只是需要注意下在记录查询的字符串时,需要将他们连成一个整体进行记录,否则数组是开不下的。代码如下:#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;#define ll long longconst int m

2015-08-22 09:28:54 1230 1

原创 hdu2222--Keywords Search+AC自动机模板

题目链接:点击进入 KMP对模式串进行处理,然后就可以方便的判断模式串是否在目标串中出现了;这显示适合一个模式串多个目标串的情况。但是如果模式串有多个,这时如果还用KMP则需要对每个串都进行一次处理,显然不是很合适。其实这时候可以将所有模式串建成一棵trie树,然后采用类似于kmp的方法计算出failed指针,也就可以方便的进行匹配了。其实这就是ac自动机的思想。代码如下:#include<ios

2015-08-17 14:15:29 981

原创 POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀

题目链接:点击进入 这个题目要求所有相同的前缀和后缀的长度。我们可以利用KMP算法中next数组的性质,在next[len]这个点不断的失配下去,这样就可以将所有相同的前后缀的长度求出来。还要注意这个中整个串的长度也可以看成是一个合法的解。代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;c

2015-08-16 16:57:40 1689

原创 POJ--2406Power Strings+KMP求字符串最小周期

题目链接:点击进入 其实就是KMP算法next数组的简单应用。如果我们设这个字符串的最小周期为x 长度为len,那么由next数组的意义,我们知道len-next[len]的值就会等于x。这就是这个题目的关键点。代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=

2015-08-16 16:01:32 867

原创 Poj--3080Blue Jeans+KMP水题

题目链接:点击进入 大概的题意就是给n个字符串,然后让我们找出他们的最长的公共子串。 因为题目的数据比较小,我们可以枚举第一个串的所有子串,然后再用KMP判断一下这个子串是否出现在其它字符串中。代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100;///x

2015-08-16 10:45:30 966

原创 树链剖分模板+入门题 SPOJ - QTREE

题目链接:[点击进入](http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13013) 树链剖分并不是一个复杂的算法或者数据结构,只是能把一棵树拆成链来处理而已,换一种说法,树链剖分只是xxx数据结构/算法在树上的推广,或者说,树链剖分只是把树hash到了几段连续的区间上。比如说下面这道题,就是将树分为重链和轻链然后映射到线段树

2015-08-13 09:17:34 909

原创 poj--2019Cornfields+二维RMQ问题

题目链接:点击进入 就是一个二维的RMQ问题,其实二维线段树或则是树状数组都是可以做的,但是二维的ST算法编码还是要简单一点。下面这份代码可以作为二维ST算法的模板用。代码如下:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int val[255

2015-08-09 10:45:44 881

原创 poj--3264Balanced Lineup+ST算法求区间最大最小值

题目链接:点击进入 其实这种动态查询区间最大最小值的题目,解法是有很多的,像是线段树和树状数组都是可以做的。ST算法效率和上面两种是一样的,但是编码更为简单。 ST算法是一种利用了递推思想进行计算的算法,令dp(i,j)表示从i开始长度为2^j的一段元素中的最小值,则dp(i,j)=min(dp(i,j-1),dp(i+2^(j-1),j-1))。这是求区间最小值的递归关系,其实求区间最大值也是

2015-08-08 11:09:17 871

原创 hdu--4417Super Mario+划分树

题目链接:点击进入 这道题就不能简单的套模板了,因为他是要判断给定的区间里有多少个值小于H。思路看完题后就有了,其实我们只要二分名次k,然后将得到的值与H进行比较就行了,这样就可以求出一个高度恰好小于H的名次作为答案了。但要注意一下,使用划分树求出的第k大值,其实是第k小值,开始就被被这一点坑了。代码如下:#include<iostream>#include<cstdio>#include<c

2015-08-07 16:43:01 531

原创 hud--4251The Famous ICPC Team Again+划分树入门题

题目链接:点击进入 这次求得是给定区间的中值,所以还是直接可以套划分树的模板。代码如下:#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int maxn=100000+100;int tree[20][maxn];int sorted[maxn]

2015-08-07 14:25:50 609

原创 划分树模板+模板题--hdu4251

题目链接:点击进入 划分树解决的是快速求区间中第k大值的问题,算法的主要思想是基于线段树和快排的划分方法,可以实现在logn时间内求出任意区间的第k大值。下面这份代码是基于hud4251的一份模板。 代码如下:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;

2015-08-07 13:21:18 849

原创 UVA 11020 Efficient Solutions+multiset的应用

题目链接:点击进入 首先来讲,很容易看到我们其实只要维护优势人群的集合;如果加入一个新的人,我们首先看一下优势人群中是否有人会让这个人失去优势,如果没有,则将这个人插入集合中,但要注意到这个人的插入可能会让其它的人失去优势。所以要求这个集合要能支持快速查询和修改操作;而multiset恰好能能满足这个需要。 代码如下:#include<iostream>#include<cstdio>#in

2015-08-07 09:57:08 840

深入浅出MyBatis

深入浅出mybatis这本书详细的描述了如何使用mybatis作为数据层半持久化框架

2018-06-07

空空如也

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

TA关注的人

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