自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

I am coming!

Fighting~ || http://weibo.com/ibattle

  • 博客(145)
  • 资源 (3)
  • 收藏
  • 关注

转载 O(n)回文子串算法

这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome-sub-string/    其实原文说得是比较清楚的,只是英文的,我这里写一份中文的吧。

2012-03-23 11:27:50 2227

原创 zoj 1944 Tree Recovery

/*zoj 1944 图论典型题,由树的前序遍历和中序遍历求后序遍历。这题跟zoj_1500可以做比较*/#include #include #include using namespace std;string ans,a,b;void build( int l1,int r1,int l2,int r2 ){ int i,len=0; if( l1

2012-02-23 21:47:18 2460

原创 zoj 1913 Euclid's Game

/*zoj 1913 博弈思路:递推 举25 7为例,则代码中的vector中为3 1 1 3(大的数对小的数反复取整所得) 不妨把最后的获胜者标记为a,则vector中最后一个元素看起,3必定为a 取整,递推知道倒数第二个元素1为b(代表令一个人),第二个元素1为 a,剩下第一个元素3。要注意的是a是获胜者。假设整个3都是b所取整的,

2012-02-23 20:56:03 2495

原创 zoj 1942 Frogger

/*zoj 1942 最短路简单最短路,要注意的是double的比较*/#include #include #include #include #define MAX 2000000000#define eps 1e-9using namespace std;struct point{ double x,y;}p[205];double map[1010]

2012-02-23 20:54:16 2811

原创 zoj 2476 Total Amount

/*zoj_2476 字符串处理简单的字符串处理,但有很多小问题需要注意,wa了数次才过。注意点:1.应该*100把小数点去掉,不要用double处理2.结果小于10和100时的特判3.不要在最前面输出','收获:这题用double做时导致了各种错误。。double在比较的时候不能直接比较大小,而要用eps控制。*/#include #include #inclu

2012-02-22 20:54:46 2635

原创 zoj 1654 Place the Robots

/*zoj_1654 最大流(最大二分匹配)这题大家可以看黄源河大牛的论文,很牛B的建图思路。匈牙利算法易解之。*/#include #include #include #include #define N 2550using namespace std;char map[55][55];bool gra[N][N],state[N];int result[N];

2012-02-20 18:48:33 2612

原创 zoj 1610 Count the Colors

/*zoj_1610 模拟线段树的典型题,不过好久没碰线段树了。发现数据才8000试了下模拟,果然没有TLE。*/#include #include #include #include #include #define N 8010using namespace std;struct segment{ int l,r,v; segment( int

2012-02-19 17:59:16 2267

原创 zoj 1854 Election

/*zoj_1854 字符串处理说实话,这题也太恶心了。。数字后面是有可能有多个空格的。。*/#include #include #include #include using namespace std;map mp;map num;int main(){ int n,m,i,maxi; string a,b; map ::iterator

2012-02-18 11:06:09 2351

原创 zoj 2376 Ants

/*zoj_2376 模拟思路:最短时间容易的,最长时间,关键要注意到每个蚂蚁速度是一样的,作图 通过距离的等价替换可以发现我们要求的其实就是(最右边的蚂蚁-左终点) 和(右终点-最左边的蚂蚁)的较大值*/#include #include #include #include using namespace std;int main(){

2012-02-17 21:17:55 2314

原创 zoj 2284 Inversion Number

/*zoj_2284 dp简单dp。题意:求n个元素(1到n)逆序对为k的排列个数思路:dp[i][j]表示i个元素有j个逆序对的排列数注意:1,0的数据输出1*/#include #include #include using namespace std;long long dp[25][205];int main(){ int n,k,i,j;

2012-02-12 23:05:38 2206

原创 zoj 1838 Crypt Kicker II

/*zoj_1838 字符串处理题意:根据已经给出的一组字符串(其中一个对应the quick brown fox jumps over the lazy dog) 破译出其他字符串。注意:输入格式注意,还有就是那句话中已经包含26个字母的了,没solution的情况是没有长度相等 的或者一个字母对应两个不同的~*/#include #include #

2012-02-11 15:40:29 2457 1

原创 zoj 2527 Series

/*zoj_2527 dp题意:从给出的序列选出n个数,组成等差数列,求最大的n思路:dp[i][j]表示以num[i]、num[j]开头的数列,记忆化搜索易写 这题要注意的是必须剔除相等元素,再查找数时可用二分。*/#include #include #include #include using namespace std;int dp[1010][101

2012-02-09 22:51:55 2452

原创 zoj 1579 Bridge

/*zoj_1579 贪心送两个人过桥为一轮进行循环,设a,b,c,d为要过桥的四个人(其中a<b<c<d)第一种方式:a,b过桥,a回来 a,c过桥,a回来 a,d过桥。第二种方式:a,b过桥,a回来 c,d过桥,b回来 a,b过桥。即比较 a+2*b+d,2*a+c+d的大小。*/

2012-02-09 21:33:10 2538 1

原创 zoj 2705 Dividing a Chocolate

/*zoj_2705 递推引用watershi神牛的解释:从描述中可以知道,完成第一刀之后后面的发展是确定的,但由于规模很大,我们不可能去枚举第一刀的情况。可以反过来思考,事实上,知道了最后的结果,比如最后是两个a*b的矩形,那么我们也可以反过来推出之前较大的那个矩形依次是2a*b, 3a*b, 5a*b, 8a*b …,这不正是著名的Fibonacci数列么。目标是a*b尽量

2012-02-09 21:16:57 2526

原创 zoj 2704 Brackets

/*zoj_2704 模拟用栈模拟。感觉题目说得不是很清楚,wa了数次才过。。[][]()()这种数据是整串输出的。*/#include #include #include #include #include using namespace std;struct node{ int id,len; char v;};stack s;int nu

2012-02-09 21:12:13 2153

原创 zoj 2588 Burning Bridges

有向图强连通分量的Tarjan算法:http://www.byvoid.com/blog/scc-tarjan//*zoj 2588 求割边Tarjan算法。第一次写tarjan,完全学习别人写的。注意点:1.必须变成有向图存储,对于一条无向边,从一个方向访问过,则另一个方向不能访问。2.因为两点之间可能有多条边,重边必定不是割边,需标记。3.临界表存储。*/#inclu

2012-02-06 12:26:14 2344 1

原创 zoj 2202 Alphacode

/*zoj_2202 dp简单dp, dp[i]=dp[i+1]+dp[i+2] , 当然还要加限制条件,详见代码。特别注意的是对0的处理。*/#include #include #include using namespace std;long long dp[10000];string s;bool check( int a,int b ){ if( s

2012-02-04 18:46:30 2250

原创 zoj 1789 The Suspects

/*zoj_1789 并查集并查集的简单应用,可以继续优化。*/#include #include #include #include #define N 30002using namespace std;int father[N],num[N],h[N];void init( int n ){ int i; for( i=0;i<n;i++ )

2012-02-04 15:34:42 2189

原创 zoj 3487 Ordinal Numbers

/*zoj_3487 字符串处理水题*/#include #include #include using namespace std;string add( char a ){ if( a=='1' ) return "st"; if( a=='2' ) return "nd"; if( a=='3' ) return "rd"; r

2012-01-31 23:49:19 2412

原创 zoj 1589 Professor John

/*zoj_1589 最短路题意:说给定几组大小关系(26个大写字母),然后输出根据这些大小关系可以 推导出的其他所有的大小关系!例如AB,C<D,则可以推导出A<C, A<D,B<D。思路:求两两关系,floyd即可,不晓得别人的0ms怎么来的。*/#include #include #include using namespace std;int

2012-01-31 23:12:18 737

原创 zoj 1952 Heavy Cargo

/*zoj_1952 最短路简单题,map+dijk*/#include #include #include #include #include #include using namespace std;map mp;int road[210][210],dist[210];bool flag[210];int dijkstra( int sta,int end

2012-01-31 21:06:30 580

原创 zoj 2750 Idiomatic Phrases Game

/*zoj 2750 最短路题意:类似成语接龙~简单题,dijkstra轻松过。*/#include #include #include #include using namespace std;struct point{ int v; string head,tail;}p[1010];int map[1010][1010];int dist[1010

2012-01-31 16:57:58 630

原创 zoj 2124 Perfect Pth Powers

/*zoj 2124 数论题意:求使得 x = b^p的最大的p。思路:将n分解质因数,原题相当于求所有质因子次数的最大公约数。 注意有负数情况,若为负数则应求最大奇公约数。*/#include #include #include #include #include #include #include using namespace std;int pr

2012-01-31 15:38:27 585

原创 zoj 1500 Pre-Post-erous!

题意:一个k叉树,给定其前序和后序遍历,问其中序遍历方式有多少种。思路:给定前序和中序无法唯一的确定一棵k叉树,但是每一个结点所在的深度      却是唯一的。本题可用递归进行计算。每次递归获得每层结点分布的可能性。      举例 :13 abejkcfghid jkebfghicda          显然a,b容易确定,由后序知 j,k,e必定为 b 的后代。对 j,k,

2012-01-30 22:34:41 1067

原创 zoj 3432 Find the Lost Sock

/*zoj_3432为异或量身定做的题。异或满足结合律和交换律,则有A^B^A = A^(B^A) = A^A^B = B所以所有字符串异或的结果就是答案了。*/#include #include #include using namespace std;int main(){ int i,j,n; string a,b; while( cin>>n

2012-01-30 00:11:44 437

原创 zoj 1484 Minimum Inversion Number

/*zoj_1484 简单题,求最少逆序对,直接暴力过了,就懒得写归并排序啦~*/#include #include #include #define N 5010using namespace std;int num[N*2];int inv[N*2];int main(){ int n,i,j,sum,temp,sta; while( scanf

2012-01-29 23:23:52 563

原创 zoj 2107 Quoit Design

/*zoj_2107 计算几何分治法求最近点对,模板题*/#include #include #include #include #include //#define min(a,b) a<b?a:b 居然不能这样写??为什么??using namespace std;struct node{ double x,y;}p1[100010],p2[100010

2012-01-29 22:31:34 602

原创 zoj 1453 Surround the Trees

Graham's Scan法求解凸包问题:http://www.cnblogs.com/devymex/archive/2010/08/09/1795392.html/*zoj_1453 计算几何-凸包凸包第一题。计算几何方面自己几乎是一片空白,要好好加强了~自己按照网上讲的Graham()算法写的一个模板,要多多改善才是。*/#include #include

2012-01-29 22:29:10 568

原创 zoj 2042 Divisibility

O(∩_∩)O哈哈~ 今天大年初一了,好冷的说~/*zoj_2042 dp简单dp dp[i][j]表示处理完前I个数,得到模M的值为J是否存在。因为犯了个低级错误,wa了数次。。以下代码写成滚动数组形式了。注意点:1.所有数都要转化为%k的余数进行dp2.负数%k是得到0或负数的*/#include #include #include using namespa

2012-01-23 13:04:44 585

原创 zoj 2059 The Twin Towers

/*zoj_2059 dp经典dp!这题很经典很经典。一开始以为全部小块都要用完觉的是很简单的dp,wa了无数次才发现不是每一块都一定要用的。。完全看别人的思路做的。感觉不太容易想。dp[i]表示两塔差值为i时较低塔的最大高度。*/#include #include #include #include #define max(a,b) a>b?a:busing n

2012-01-21 20:52:21 751

原创 zoj 1107 FatMouse and Cheese

/*zoj_1107 dp记忆化搜索的典例。注意点:1.bfs是会MLE的2.题意中的最多k步是只垂直或者只水平的。*/#include #include #include #include #include using namespace std;int v[110][110],dp[110][110];int ope[4][2]={ 0,1,0,-1,1,0

2012-01-20 21:22:03 640

原创 zoj 1733 Common Subsequence

/*zoj_1773 dp最大公共子串,dp基础题*/#include #include #include #include #define maxi(a,b) a>b?a:busing namespace std;int dp[1000][1000];int main(){ string a,b; int i,j,temp; while(

2012-01-19 18:24:49 722

原创 zoj 1163 The Staircases

/*zoj_1163 dp很经典的一题。这题的转移方程比较难想。 dp[i][j]=dp[i][j-1]+dp[i-j][j-1] 其中dp[i][j]表示用前j个数(即1--j)表示i的方法数。注意点:1.必须用long long2.初始化dp[0][2]为什么是1 ?最后输出为什么是dp[n][n-1]而不是dp[n][n] ? 举个例子:dp[7][4]=dp[3][

2012-01-19 13:01:58 716

原创 zoj 2711 Get Out of the Glass

/*zoj_2771 dp+高精度简单dp,不过又是要结合上高精度。。思路: 对玻璃四层(即四个交接面)分别标记为0,1,2,3 dp[i][j] 表示第j个反射点在第i层的可能数。 则易知: j%2==0时有: dp[i][j]=sum( dp[k][j-1] ); i<k<4 否则: dp[i][j]=sum(

2012-01-18 19:15:36 484

原创 zoj 3502 Contest

/*zoj_3502 dp状态压缩dp,二进制压缩状态,与zoj 3471类似。注意点:1.不要被hint误导,其实仅仅是要求解出各题概率的和的最大值。2.精度控制。总结一下是要求一个最优排列的题基本上都可以用二进制压缩状态的。*/#include #include #include #include using namespace std;#define e

2012-01-18 16:05:59 562

原创 zoj 2711 Regular Words

/*zoj_2711 dp+高精度很简单的dp,不过结果是很大的,必须使用高精度。*/#include #include #include using namespace std;int dp[61][61][61][21];void print( int n ){ int i; if( n==0 ) { cout<<0; return; }

2012-01-18 10:45:11 551

原创 zoj 1024 Calendar Game

/*zoj_1024 博弈引用别人解释:Tips:这是一道博弈题,活的胜利的一方必须翻倒2001年11月4日;下面是观察推论结果,11月4日,11+4=15是奇数。由于无论是加一天还是加一个月都会改变m+d的奇偶性,除了下面几个特例2月28日、9月30日和11月30日,显然如果m和d是这三个日子的话则先行者必胜:2月28日到3月28日9月30日到10月1日11月30日到12月

2012-01-16 15:51:24 1251

原创 zoj 3471 Most Powerful

效率低下的日子。。每天都好晚起,要有所改变的。/*zoj_3471 dpzoj月赛的一道题。发现网上普遍的解法都是二进制压缩状态。eg.二进制1010表示第二和第四个已经消失则有状态方程为 dp[ k|model[j] ]=max( dp[ k|model[j] ],dp[k]+power[i][j] ),表示不在k状态中的i原子和j原子相撞并使j原子撞毁所能得到的最大值。*/

2012-01-16 15:46:11 788

原创 zoj 1602 Multiplication Puzzle

寒假已经过去那么几天了,加油了,这个寒假很关键很关键!/*dp不错的一道题。状态方程dp[i][j]=min{dp[i][k]+dp[k][j]+num[i]*num[k]*num[j]} (i<k<j)dp[i][j]表示第i个元素到第j个元素按照游戏规则所得的最优解。Process:1.一开始一直想成 dp[i][j]=min{dp[i][k]+dp[k][j]+num[k-1]

2012-01-15 23:31:36 515

原创 zoj 1629 Counting Triangles

/*zoj_1629 数论纯数学题,勿忘计算顶角向下的下三角形。易发现边长为n的下三角形个数和边长为2n的上三角形个数是一样多的。*/#include #include using namespace std;int main(){ int i,n,sum; while( cin>>n ) { sum=0; for( i=

2012-01-15 16:59:00 1023

国家集训队2004论文集_黄源河

国家集训队2004论文集_黄源河 对zoj的一些problem有很详尽的分析,提供了很不错的思路。

2012-02-20

最小表示法课件(周源)

周源《浅析“最小表示法”思想在字符串循环同构问题中的应用》。。。。。

2011-10-07

瑞士军刀NC

在入侵中它是最经典的工具之一 ,NetCat被所有的网络安全爱好者和研究者称之为瑞士军刀,通过名字大家就能知道他的功能足够丰富。 nc的全称为NetCat,它能够建立并接受传输控制协议(TCP)和用户数据报协议(UDP)的连接,Netcat可在这些连接上读写数据,直到连接关闭为止。它可以通过手工或者脚本与应用层的网络应用程序或服务进行交互。从技术上来讲,NetCat并不能产生UDP连接,因为UDP是一种无连接的协议。NetCat没有图形界面,很粗糙,很原始。

2011-10-03

空空如也

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

TA关注的人

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