- 博客(76)
- 资源 (1)
- 收藏
- 关注
转载 后缀数组——处理字符串的有力工具
<br />后缀数组——处理字符串的有力工具<br />作者:罗穗骞<br />2009年1月<br />【摘要】<br /> 后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组的方法,重点介绍如何用简洁高效的代码实现,并对两种算法进行了比较。第二部分介绍后缀数组在各种类型题目中的具体
2010-08-30 20:09:00 2747 1
原创 poj3342
#include#include#include#include#includeusing namespace std;int n;vector son[205];int dp[205][2];int num;int treep(int k,int p)//k为节点标号;p为是否选的标志 {//记忆化搜索 int i,len,sum; if(dp[k][p]!=-1) {return dp[k][p];}//以被算过 len=son[k].siz
2010-08-28 22:09:00 633
原创 zoj j
<br />#include<iostream><br />using namespace std;<br />int main(){<br /> //freopen("in.txt","r",stdin);<br /> // freopen("out.txt","w",stdout);<br /> int m;string s;<br /> while(scanf("%d",&m),m){<br /> cin>>s;<br />int max=0;int rr=0;<b
2010-08-28 16:46:00 405
转载 最大独立子集模板!!!(树形dp)
#include #include #include using namespace std;/*********************************/* 可以动态变化的邻接矩阵* G[i]表示顶点i的邻接点/*********************************/const int MAXN=100;vector G[MAXN]; //无根树int l[MAXN]; //结点层次int p[MAXN]; //根树int dp[MAXN]; //dp数组int sumS[MAXN];
2010-08-27 19:45:00 760
转载 有向树k中值问题模板!!!(树行dp)
#include using namespace std ;typedef struct binode{ int wx , w , wd , *cost , d ;//wi,vi,di分别表示编号为i 的顶点的权为wi,相应的有向边为(i, vi),其边长为di struct binode *parent , *left , *right ;}binode , *link ;int n , k ;link *subt ;link Newnode (){ link p = new binod
2010-08-26 21:39:00 1939
转载 ssscanf用法积累!!!
<br />大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。<br /> 1. 常见用法。<br />以下是引用片段:<br /> char str[512] = {0}; <br /> sscanf("123456 ", "%s", str); <br /> printf("str=%s/n", str);<br /> 2. 取指定长度的字符串
2010-08-25 23:05:00 796
原创 zoj3383
<br />一道做到我流泪又流汗的题!!!题目什么也不说就让你看sample,真实。。。。特别是w和h的交换,哎,无语。。。。<br />#include<iostream><br />#include<string><br />using namespace std;<br />char ss[200];<br />string a[305][305];<br />int b[305][305];<br />int main(){<br /> // freopen("in.txt","r",s
2010-08-25 22:28:00 343
原创 STL------set用法!!!
STL中set的使用2010年06月10日 星期四 20:44set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)set模板原型://Key为元素(键值)类型template , class
2010-08-23 16:27:00 644
原创 zoj3384
#include#include#includeusing namespace std;int a[1005];int b[1005];int c[1005];int main(){ int n;int suma;int sumb; while(cin>>n){ int i=0; memset(c,0,sizeof(c)); suma=0;sumb=0; for( i=0;i>a[i];suma+=a[i];} for( i=
2010-08-22 17:47:00 366
原创 joj2689
#includeusing namespace std;int n,m;int a[115][115];int c[115];int b[115];//int max_array(int* p,int m){ memset(c,0,sizeof(c)); c[0]=p[0]; for(int i=1;i {if(c[i-1] c[i]=p[i]; else c[i]=c[i-1]+p[i]; } int
2010-08-21 16:34:00 290
转载 最大子矩阵模板
#include using namespace std; int ** a; int **sum; int max_array(int *a,int n){ int *c = new int [n]; int i =0; c[0] = a[0]; for(i=1;i { if(c[i-1] c[i] = a[i]; else
2010-08-21 14:13:00 398
原创 acm---文件应用
freopen函数在竞赛中的使用(2010年06月23日) 发表于 ChinaUnix<br />在做 acm 题目的过程中,我们需要在本地机器上调试。调试过程中,如果输入数据少还可以接受,但如果输入数据很庞大的话,我们就很难忍受一次又一次的重新输入和调试了。通过 google ,找到一种简便的方法,那就是 freopen 函数。 <br /> 使用 freopen 函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 <br />下面为函数的简介,详细可参见 ht
2010-08-20 12:24:00 408
原创 hdoj1176
#includeusing namespace std;int c[100002][12];int d[100002][12];int main(){ int x,t,n; while(scanf("%d",&n)!=EOF){ memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); for(int i=1;i=5+i;j--) if(c[i]
2010-08-15 14:08:00 473
原创 uva4267
<br />#include<iostream><br />#include<stdio.h><br />#include<algorithm><br />using namespace std;<br />int a[1005];<br />int d[1005];<br />int mat[1005][1005];<br />bool v[1005];<br />int fa[1005];<br />int ans[1005];<br />int n;<br />void dijskra(){<br /
2010-08-15 13:59:00 284
原创 uva3900
<br />#include<iostream><br />#include<stdio.h><br />#include<string.h><br />using namespace std;<br />int main(){<br /> int T;<br /> scanf("%d",&T);<br /> char s[82];<br /> while(T--){<br /> scanf("%s",s);<br /> int n=strlen(s);<
2010-08-15 08:53:00 286
原创 poj1887
<br />很简单的dp,但是题意难理解;<br />本人一开始以为是求最长的(连续的)的降序列!!!悲剧,但其实是不用连续!!!<br /> <br />#include<iostream><br />using namespace std;<br />int a[100000],d[100000];<br />int main(){<br /> int m=1;<br /> while(1){<br /> int temp;<br /> cin>>temp;<br
2010-08-13 11:13:00 525
原创 hdoj1466
<br />(m-r)条平行线与r条直线交叉的交点数 + r条直线本身的交点方案 =(m-r)*r+r条之间本身的交点方案数(0<=r<m)<br /> <br />#include<iostream><br />using namespace std;<br />int n,sum[22][191],t;<br />void point(){<br /> for(int i=0;i<=n;i++)<br /> sum[i][0]=1;<br /> for(int k=2;k<21;k
2010-08-12 15:09:00 574
原创 poj2677
<br />/*此方法超时,原因在于最大的排列数达到16!=2*(10的13次方)<br /> 故只能用搜索做!!!*/<br />#include<iostream><br />#include<algorithm><br />using namespace std;<br />int a[17];<br />int main(){<br /> int n,m;<br /> while(cin>>n>>m){<br /> for(int i=0;i<n;i++) a[i]=i+
2010-08-11 11:08:00 714
原创 poj1141
<br />#include<stdio.h><br />#include<math.h><br />#include<algorithm><br />using namespace std;<br />double r[10002]={0.0};<br /><br />//bool comp(double x,double y){if(a/b<=x/y&&x/y<=1) return true;else return false;}<br />int main(){<br />double m,n,a,b
2010-08-11 11:04:00 370
原创 poj1426
<br />简单的bfs,但应该用字符处理才是最安全的__int64也不是很好<br />#include<iostream><br />using namespace std;<br />__int64 q[1<<20];<br />int n;<br />void bfs(){<br /> int front=0,rear=0;<br /> q[rear++]=1;//m第一个 数位0无意义; <br /> __int64 u;<br /> while(front<rear)
2010-08-11 10:56:00 308
原创 1141
#include#includeusing namespace std;int main(){ int n;int coach[1002]; while(scanf("%d",&n),n){ stack mm; while(1){ while(!mm.empty())mm.pop();cin>>coach[0];if(coach[0]==0){coutelse{ int i=0; for(i=1;i cin>>coach[i]; int r=n-1,q=n; while(r>=0){
2010-08-10 19:38:00 367
原创 poj3349
Snowflake Snow SnowflakesTime Limit: 4000MS Memory Limit: 65536KTotal Submissions: 14656 Accepted: 3615<br />Description<br />You may have heard that no two snowflakes are alike. Your task is to write a program to determine whether this is really true. You
2010-08-10 19:37:00 405
原创 求子集的算法
<br />#include<iostream><br />#include <stdlib.h><br />#include<math.h><br />using namespace std;<br />int prim=0;<br />int pr (int sum)<br />{<br /> int i;<br /> int p=1;<br /> if(sum==1)<br /> p=0;<br /> else<br /> if(sum==2)<br />
2010-08-10 19:22:00 1249
原创 无向图求环路
<br />1. 判断N结点的无向图G是否有环<br /><br />假定:结点个数为M,边条数为E<br />遍历一遍,判断图分为几部分(假定为P部分,即图有 P 个连通分量)<br />对于每一个连通分量,如果无环则只能是树,即:边数=结点数-1<br />只要有一个满足 边数 > 结点数-1<br />原图就有环<br />将P个连通分量的不等式相加,就得到:<br /> 所有边数 > 所有结点数 + 连通分量个数<br />即: E + P > M 所以只有判断
2010-08-10 19:20:00 3823
原创 poj2485
<br />#include<iostream><br />using namespace std;<br />int t,n;<br />int w[503][503];<br />int lowcost[503];<br />bool s[503];<br />int maxlen;<br />void prim(){<br /> int i,j;int k;<br /> memset(s,0,sizeof(s));<br /> s[1]=1;<br />for(i=1;i<=n;i++)<br />
2010-08-10 19:16:00 336
原创 poj2359
<br />#include<iostream><br />#include<algorithm><br />using namespace std;<br />int n,m;<br />long ans=0;<br />int p[2002];<br />long w[10002];<br />int r[10002];<br />int u[10002];<br />int v[10002];<br />bool comp(int i,int j){return w[i]<w[j];}<br />in
2010-08-10 19:13:00 516
原创 poj1861
<br />#include<iostream><br />#include<algorithm><br />using namespace std;<br />int w[15002];<br />int u[15002];<br />int v[15002];<br />int p[1002];<br />int r[15002];<br />int ans;<br />struct p{<br /> int uu;<br /> int vv;}point[1002];<br /> int k=0;<b
2010-08-10 19:12:00 470
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人