上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页
摘要: 刘汝佳新书--训练指南题意:给出N个不同单词和一个长字符串S。把这个字符串分解成若干个单词的连接(单词尅重复使用),问有多少种方法?分析:令d[i]表示从字符i开始的字符串的分解方案数,则dans[i]=sum{dans[i+d[x]] | 单词x是S[i...len]的前缀};// File Name: 1401.cpp// Author: zlbing// Created Time: 2013/3/14 18:55:52#include<iostream>#include<string>#include<algorithm>#include<cst 阅读全文
posted @ 2013-03-14 20:01 z.arbitrary 阅读(528) 评论(0) 推荐(0) 编辑
摘要: Trie树也叫前缀树用来保存字符串集刘汝佳新书----训练指南前缀树模版const int maxnode = 4000 * 100 + 10;const int sigma_size = 26;// 字母表为全体小写字母的Triestruct Trie { int ch[maxnode][sigma_size]; int val[maxnode]; int sz; // 结点总数 void clear() { sz = 1; memset(ch[0], 0, sizeof(ch[0])); } // 初始时只有一个根结点 int idx(char c) { return c - '. 阅读全文
posted @ 2013-03-14 19:50 z.arbitrary 阅读(140) 评论(0) 推荐(0) 编辑
摘要: wa成屎了。。。还是没过!-----------------------------过了!!!各种bug啊。。。刚才又瞄了一眼,发现移位多写了一个1。我草。fuck! 题意:给出一个长度为n的整数序列D,你的任务是对m个询问做出回答。对于询问(a,b),需要找到两个下标x,和y,使得a<=x<=y<=b,并且Dx+Dx+1+....+Dy尽量大。如果有多组满足条件的x和y,x尽量小。如果还有多个解,y应该尽量小分析:这个需要应用求最大连续子序列的分治算法:最优解要么完全在左半序列,要么完全在右半序列,要么跨越中点;构造一颗线段树,其中每个结点维护3个值:区间最大连续和max_ 阅读全文
posted @ 2013-03-13 20:25 z.arbitrary 阅读(1430) 评论(2) 推荐(0) 编辑
摘要: http://www.notonlysuccess.com/index.php/segment-tree-complete/#include <cstdio>#include <algorithm>using namespace std; #define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1const int maxn = 111111;int h , w , n;int col[maxn<<2];int sum[maxn<<2];void Pus 阅读全文
posted @ 2013-03-12 11:39 z.arbitrary 阅读(1267) 评论(1) 推荐(0) 编辑
摘要: http://www.notonlysuccess.com/index.php/segment-tree-complete/线段树功能:update:单点增减 query:区间求和#include <cstdio> #define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1const int maxn = 55555;int sum[maxn<<2];void PushUP(int rt) { sum[rt] = sum[rt<<1] + sum[rt<< 阅读全文
posted @ 2013-03-12 11:37 z.arbitrary 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个数组,然后问你在区间(L,R)里相同数字出现的最多次数。。分析:因为是非降序的,所有相同的元素会聚集到一起。这个就可以把整个数组进行编码,变成出现次数为数组的值的数组,然后求区间的最大值即可。比如-1,1,1,2,2,2,4就可以编码成(-1,1)(1,2)(2,4)(4,1),其中(a,b)表示有b个连续的aG[i]为第i段的值,cnt[i]为第i段的个数,F[i]为第i段的左端点位置,R[i]为第i段右端点的位置,pos[i]为第i个数所在的段// File Name: 11235.cpp// Author: zlbing// Created Time: 2013/3/9 21 阅读全文
posted @ 2013-03-10 17:43 z.arbitrary 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 题意是求一个欧拉路,并以字典序输出要欧拉路以字典序输出,则一开始将边进行排序,然后构图,选择字典序最小的可用点作为开始点查找欧拉路,然后倒序输出,即可。(不知道证明。。。。。)// File Name: 2337.cpp// Author: zlbing// Created Time: 2013/3/10 15:36:00#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#in 阅读全文
posted @ 2013-03-10 16:38 z.arbitrary 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个乒乓球运动员,他们每个人都有自己的技能值,且各不相等。现在问你从中选出两个运动员和一个教练组成一场比赛,且要求教练要在两个运动员中间,教练的技能值也要在两个运动员之间。分析:假设选中A[i]当作教练,则我们需要知道A[0]~A[i-1]有ai个小于A[i],者我只需对前i个插入树状数组中有几个小于A[i]几个,也就是求1~A[i]的前缀和。。同理也可以从右往左再用一遍树状数组,即可得A[i+1]~A[n-1]有bi个大于A[i]。。Si=ai*bi+(i-ai)*(n-i-1-bi),再求S和,我们就可以得到结果。感觉自己的文字描述语言弱爆了。。。!!!请原谅// File Nam 阅读全文
posted @ 2013-03-09 18:57 z.arbitrary 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个结点,初始时每个结点的父节点都不存在。你的任务是执行一次I操作和E操作,格式如下。I u v:把结点u的父节点设为v,距离为|u-v|除以1000的余数。输入保证执行指令前u没有父节点。E u:询问u到根节点的距离分析:因为题目只查询结点到根节点的距离,所以每棵树除了根节点不能换之外,其他结点的位置可以任意改变,这恰好符合并查集的特点,但是需要记录附加信息。// File Name: 1329.cpp// Author: zlbing// Created Time: 2013/3/8 22:06:16#include<iostream>#include<strin 阅读全文
posted @ 2013-03-08 22:34 z.arbitrary 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 一道简单的并查集。。题意其实就是判断是否有环。。// File Name: 1160.cpp// Author: zlbing// Created Time: 2013/3/8 21:26:11#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include<map>#include<vector>#include<cstring>#inc 阅读全文
posted @ 2013-03-08 21:39 z.arbitrary 阅读(205) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页