上一页 1 ··· 4 5 6 7 8

2012年2月10日

poj 3630 Phone List Trie树

摘要: 题意:给一组互不相同的序列,问其中是否有字符串是另一字符串的前缀思路:Trie树水题 1 #include<iostream> 2 using namespace std; 3 #define MAXN 100010 4 struct node 5 { 6 bool end; 7 node *next[10]; 8 }; 9 node *root;10 int top=0;11 bool is_new,ans;12 node memo[MAXN];13 void insert(node *t,char c[],int i)14 {15 if(t->end)16 ... 阅读全文

posted @ 2012-02-10 17:06 myoi 阅读(188) 评论(0) 推荐(0) 编辑

poj 3691 DNA repair AC自动机+DP

摘要: 题意:给定n个疾病DNA序列,和一个待修复序列str。用最小的次数修改待修复序列,使其不含疾病DNA序列。思路:AC自动机+DP建自动机 并加上虚拟节点 每一个节点作为一个dp第二维状态dp[i][j] 表示修复str前i个字符,且当前状态为j的最小修改次数str从1开始 AC自动 树根标号为0 dp[0][0]=0;dp[i+1][j]=min(dp[i+1][j],dp[i][j]+(j代表的当前字符!=str[i+1]))ans=min(ans,dp[m-1][j]); (0<=j<top) top是自动机节点数 1 #include<iostream> 2 us 阅读全文

posted @ 2012-02-10 11:16 myoi 阅读(373) 评论(0) 推荐(0) 编辑

2012年2月9日

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

摘要: 题意:给定M个疾病DNA序列,求组成长度为N的DNA序列的个数,其字串不含疾病DNA,答案模100000。思路:AC自动机+矩阵快速幂先建自动机,注意某给定的疾病DNA序列是另一疾病DNA序列的子串的情况。 这种情况可以在建立失败链接的时候搞定。之后自动机上 每一个节点作为一个状态,总共node_num个状态node_num<=101。题目可以转换在一个有向图里,从i开始走k步一共有多少条路径。答案是有向图的邻接矩阵的k次方 输出G[i][1]+……+G[i][n]建立一个node_num*node_num 的矩阵 进行矩阵快速幂 具体转化详见http://hi.baidu.com/%D 阅读全文

posted @ 2012-02-09 20:29 myoi 阅读(263) 评论(0) 推荐(1) 编辑

poj 3294 Life Forms 后缀数组

摘要: 题意:给n个字符串,求一个最长的子串至少出现在[n/2+1]个字符串中思路:后缀数组 把所有字串连一起,并用不同的字符隔开 二分P.S. 1. 我的程序C++WA,G++ AC 2. 为什么char的上界是127啊 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 #define MAXN 110000 6 int n,m; 7 int suffix_array[MAXN]; 8 int rank[2*MAXN],oldrank[2*MAX 阅读全文

posted @ 2012-02-09 13:39 myoi 阅读(248) 评论(0) 推荐(0) 编辑

poj 3261 Milk Patterns 后缀树组

摘要: 题意:求可相交的重复k次串思路:后缀数组+二分 1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 20001 6 struct number 7 { 8 int num,id; 9 }; 10 number a[MAXN]; 11 int b[MAXN]; 12 int suffix_array[MAXN]; 13 int cnt[MAXN]; 14 int tmp[MAXN]; 15 int rank[MA 阅读全文

posted @ 2012-02-09 09:57 myoi 阅读(454) 评论(0) 推荐(0) 编辑

2012年2月8日

poj 2667 hotel 线段树

摘要: 基本和poj 1823 hotel基本一样 只需加一个find函数 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 #define MAXN 50001 5 struct node 6 { 7 int lmax,rmax,max; 8 int left,right; 9 int flag; 10 int r; 11 }; 12 node tree[MAXN*4]; 13 void build(int i) 14 { 15 tree[i].lmax=tree[... 阅读全文

posted @ 2012-02-08 23:23 myoi 阅读(206) 评论(0) 推荐(0) 编辑

poj 1823 hotel 线段树

摘要: 题意:一个hotel,有n个连续的房间,开始时均无人住宿共有3种操作1 a b 从a开始连续b个房间全部旅客住宿 [a,a+b-1];2 a b从a开始连续b个房间全部旅客离开[a,a+b-1];3 查询最长连续空房间思路:线段树,记录每个节点,左边,右边各最多连续空房间lmax,rmax; 以及这个区间内最多空房间max 1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 #define MAXN 16001 5 struct node 6 { 7 int lmax,rmax,max; 8 . 阅读全文

posted @ 2012-02-08 22:06 myoi 阅读(489) 评论(0) 推荐(0) 编辑

poj 2482 Stars in Your Window 线段树

摘要: 题意:平面上有n个星星,给出每个星星的位置和亮度 求一个W*H的矩形(不包括边界)使得矩形内的星星亮度之和最大。思路:每个点(x,y,brightness) 存两个点(x,y,brightness)和(x,y+H,-brightness)先离散化从左到右两根间距为W的扫描线,左开右闭。依次把点加进线段树,下标是y,权值是brightness,题目所求的就是前i个点的和的最大值。线段树存当前范围内的sum,maxsum其中 maxsum[i]=max(maxsum[2*i],sum[2*i]+maxsum[2*i+1]);ans=max(maxsum[i]) 1 #include<iost 阅读全文

posted @ 2012-02-08 19:45 myoi 阅读(583) 评论(0) 推荐(1) 编辑

上一页 1 ··· 4 5 6 7 8

导航