自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

acmer的随记

acm点点滴滴

  • 博客(13)
  • 收藏
  • 关注

原创 uva11235 RMQ

一段不减序列a1,a2...an,对于任意询问(i,j),回答ai,a(i+1)...aj中出现次数最多的值所出现的次数 按照不同值将序列分为若干段,记录相关数组,并用RMQ进行询问。 #include #include #include using namespace std; const int maxn=100000+10; const int maxlog=20; //区间最大值

2015-02-10 12:01:28 298

原创 poj1990&&uva1428 树状数组

求递增五元组的个数 不断更新的动态规划? 记c[i][j]为前k个数(当前状态)中以j结尾的递增i元组的个数 若第k+1个数为a[k+1],则c[i][a[k+1]]+=sum(c[i-1][j]),2 答案为sum(c[5][a[i]]),每次在更新第i个数之前进行叠加! 区间和加法可以用树状数组优化! 记c[i][j]为前k个数(当前状态)中树状数组意义下以j项节点区间所有点结尾的

2015-02-04 22:20:10 341

原创 poj3321 树状数组

每个节点有权值为0/1,初始化为1,每次操作都使得某点权值变化,每次询问某点及其子树权值和。 树的子树权值和问题可转化为线性数组问题:记st[u]为dfs第一次访问u的时间戳,en[u]为dfs回溯到u的时间戳。 从而子树权值和问题转化为连续区间求和和点更新问题,可以用树状数组进行解决。 变题:每个点权值初始化为任意值;点更新时可以更新为任意值,求子树权值和。 思路类似,updat

2015-02-04 21:39:52 340

原创 uva3027 ADT

若干个有根树,每个节点和父节点的距离=编号之差的绝对值%1000。每次询问一个节点和根节点间的距离。 询问过程中可以采取路径压缩并维护数组d[i]:i到其父节点的距离。可以大大降低复杂度 #include #include #include #include using namespace std;; const int maxn=20000+10; int pa[maxn],d[m

2015-02-04 21:13:07 283

原创 uva1160 ADT

每次给出一个由两种元素组成的化合物,如果加入该化合物后,存在k个化合物恰包含k中元素,则存在安全隐患,故不能将其加入,否则加入。 判断有多少个化合物不能被加入。 抽象出数学模型:每次加入一个化合物,相当于两种元素相关。因此每个元素为一个节点,每个化合物是一条边。题目转化为:始终不存在环关系,有多少个化合物不能被加入? 结论:加入该边后存在环该边两端点的根节点相同 将顶点按根节点进行分类--

2015-02-04 19:44:55 302

原创 uva11997 ADT

从k个数组(每个数组中k个元素)中各任取一个元素求和,得到k^k个元素。从小到大输出前k个合并后的元素。 常规做法:将所有元素求和排序,O((k^k)*log(k^k)),超时 巧妙做法: 结论:将数组两两合并后的结果不变 证明:两两合并后再与另一个数组合并且为三个数合并的结果,所以数值不变 题目简化为求两两合并后前k个合并后的元素 结论:将k个有序表(每个表含m个元素)合并(插入后仍

2015-02-03 12:21:00 257

原创 uva1203 ADT

结构体+优先队列解决多路合并问题:将k个有序表合并成一个有序表。设共有n个元素,每个元素插入和取出一次,因此总复杂度O(n*logk)。 #include #include #include using namespace std; struct Item{ int Qnum,Period,Time; bool operator<(const Item& a) cons

2015-02-03 11:46:45 335

原创 uva11991 ADT

查找数组中第k个v出现的位置,不存在输出0 用map > a;可以开二维不定长数组! #include #include #include using namespace std; map > a; int main(){ int n,m,x,y; //freopen("a.txt","r",stdin); while(scanf("%d%d",&n,&m)!=

2015-02-03 11:31:54 271

原创 uva 11995 ADT

判断数据结构种类,模拟 注意嵌套书写方式 #include #include #include using namespace std; const int maxn = 1000 + 10; int n, t[maxn], v[maxn]; int check_stack() { stack s; for(int i = 0; i < n; i++) { if(t[i]

2015-02-03 11:28:22 247

原创 uva11107 后缀数组

给定n个字符串,求长度最大的字符串(不一定是原字符),在超过一半的字符串中连续出现 1.将n个字符串通过特殊字符连接起来,合成一个文本串。题目转化为寻找匹配点的对应字符串个数超过n/2的最长字符串 2.二分答案求出最大值。 二分最大值的基础:如果对于x成立,则对于不大于x的所有值都成立,则可以二分最大值 3.判断是否存在长度不小于p的串在超过n/2的不同字符串区域出现 如何判断?

2015-02-02 19:54:09 289

原创 uva 11019 AC自动机

二维字符串匹配 把二维模板串的每行作为一个一维模板串,建立AC自动机,用原字符串的每行分别匹配,找到每一个匹配点(通过find函数即可做到),然后,在匹配的过程中,进行一些记录就可以求出结果!如何记录呢? 记cnt[r][c]:以(r,c)为左上角的矩形与二维模板串P相同 cnt[r-i][c]++:模板串的第i行字符串的匹配点在(r,c)处。  #include #inclu

2015-02-02 09:44:42 258

原创 uva11468 AC自动机&&树形DP

题意:给定一些字符和选择概率,随机选择L此得到长度为L的随机字符串。再给出K个模板串,计算S不包含任何一个模板串的概率。 将所有可能字符加入Trie树,建立AC自动机,定义match数组。 match[u]=1:u字符串含有模板子串。如何计算match数组? 初始化:match[u]=1:u是模板串结尾结点 递推公式:match[u]|=match[f[u]](u本身是模板串/u沿着失配边

2015-02-01 12:30:26 271

原创 UVA1449 AC自动机

给定n个由小写字母组成的字符串和一个文本串T,找出哪些字符串在T中出现的次数最多。 AC自动机应用之一:统计每个模板串在原字符串中出现的次数 AC自动机的精华:利用last函数,将模板串的所有子串连接起来,只要沿着边走就可以遍历所有模板串的所有子串 对于重复的模板串题目要求重复输出,因此需要对每一个字符串对应一个序号,这样相同的字符串可以有两个不同的序号。 #include #

2015-02-01 12:09:10 327

空空如也

空空如也

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

TA关注的人

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