上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 25 下一页
摘要: 不知道错在哪了,求大神指教!!!思路:用manacher求出每个以str[i]为中心轴的回文串的长度,RMQ预处理区间最大值,对于每个查询,二分最大回文串长,判定是否可行。#include #include #include #include using namespace std;const int MAXN = 222222;char str[ MAXN ];int data[ MAXN * 2 ];int p[ MAXN * 2 ];int d[ MAXN * 2 ][30];int n, len;void init(){ int id,MaxL,MaxId; int i; ... 阅读全文
posted @ 2013-08-27 21:25 冰鸮 阅读(421) 评论(0) 推荐(0)
摘要: 对这棵树DFS遍历一遍,同一节点入栈和出栈之间访问的节点就是这个节点的子树。因此节点入栈时求一次 小于 i 的节点个数 和,出栈时求一次小于 i 的节点个数和,两次之差就是答案。PS.这题直接DFS会爆栈,可以重新设置栈的大小#pragma comment(linker,"/STACK:100000000,100000000")也可以人工模拟栈,代码如下。#include #include #include #include using namespace std;const int MAXN = 110000;struct Edge{ int v; int next;}; 阅读全文
posted @ 2013-08-21 10:26 冰鸮 阅读(268) 评论(0) 推荐(0)
摘要: 原文地址:http://www.cppblog.com/MatoNo1/archive/2011/03/19/142226.html树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0):(1)“改点求段”型,即对于序列A有以下操作:【1】修改操作:将A[x]的值加上c;【2】求和操作:求此时A[l..r]的和。这是最容易的模型,不需要任何辅助数组。树状数组中从x开始不断减lowbit(x)(即x&(-x))可以得到整个[1..x]的和,而从x开始不断加lowbit(x)则可以得到x 阅读全文
posted @ 2013-08-20 20:11 冰鸮 阅读(199) 评论(0) 推荐(0)
摘要: 题意:求区间内不同的数的和离线处理,按查询右端点从小到大排序,从左往右扫一遍。记录每个数出现的上一个位置,如果该数之前没有出现过,就加上,否则就在上一个位置减去。#include #include #include #include #define LL long long intusing namespace std;const int MAXN = 1000100;struct node{ int id; int l, r;};int N, Q;int pre[MAXN]; //某数之前出现的位置LL sum[50100];LL val[50100];int maxL... 阅读全文
posted @ 2013-08-20 20:03 冰鸮 阅读(174) 评论(0) 推荐(0)
摘要: http://blog.csdn.net/acm_cxlove/article/details/7548087感觉最巧的是定义了min_dis……将区间内有无英雄升级分开处理#include #include #include #include #define lson l, m, rt > 1; build( lson ); build( rson ); return;}void PushDown( int rt ){ if ( Tr[rt].flag ) { Tr[lc].exp += Tr[rt].flag * Tr[lc].level; ... 阅读全文
posted @ 2013-08-20 10:38 冰鸮 阅读(333) 评论(0) 推荐(0)
摘要: 正解2-SAT。我用DLX想搜一搜的,结果TLE了……没什么遗憾,最起码我尝试过了。扔个代码留作纪念。#include #include #include #include #include using namespace std;const int INF = 1 N ) return false; if ( R[head] == head ) { if ( cur == N ) return true; return false; } minv = INF; for ( i = R[head]; i != h... 阅读全文
posted @ 2013-08-19 22:28 冰鸮 阅读(352) 评论(0) 推荐(0)
摘要: 虽然看起来是求最短路,但因为条件的限制,可以转化为区间求最小值。对于一条small path [a, b],假设它的长度是len,它对区间[a, b]的影响就是:len-( sum[b]-sum[a-1] );(使区间[a,b]的原有长度变长或者变短,变长没有意义,所以我们只考虑变短的情况),因为只能选择一条small path,所以对于每个查询[u, v],就是要选择在区间[u, v]内,让原有长度减少最多的那条small path,即求区间最小值。离线处理:将查询和small path放在一起排序,按u从大到小,v从小到大排。因为我们要从后往前扫,对于每个查询[u, v],我们应当保证在本 阅读全文
posted @ 2013-08-19 22:04 冰鸮 阅读(314) 评论(0) 推荐(0)
摘要: DLX经典题型,被虐惨了……建一个2*N行3*N列的矩阵,行代表选择,列代表约束。前2*N列代表每个人的哪种状态,后N列保证每个人至多选一次。显然对手可以被战胜多次(重复覆盖),每个角色至多选择一次(精确覆盖)。注意事项:1.行数=∑每个人的模式数,之前我直接把行数当2*N了……但实际上也会有人只有一种模式的,也就是说实际行数小于等于2*N2.建图的时候注意:这个人不光能覆盖他所战胜的某角色的某模式,还覆盖了他自己的所有模式(因为他不用战胜自己)。之前没注意这个问题,样例全成无解了orz……3.处理精确覆盖和重复覆盖的先后顺序。如果优先处理精确覆盖,会把重复覆盖的一些行也删掉,这样前面可以重复 阅读全文
posted @ 2013-08-18 15:37 冰鸮 阅读(412) 评论(1) 推荐(0)
摘要: 以下转自 这里 :最小支配集问题:二分枚举最小距离,判断可行性。可行性即重复覆盖模型,DLX解之。A*的启发函数:对当前矩阵来说,选择一个未被控制的列,很明显该列最少需要1个行来控制,所以ans++。该列被控制后,把它所对应的行,全部设为已经选择,并把这些行对应的列也设为被控制。继续选择未被控制的列,直到没有这样的列。#include #include #include #include #include using namespace std;const double eps = 1e-9;const int INF = 1 K ) return false; int minv = ... 阅读全文
posted @ 2013-08-17 20:41 冰鸮 阅读(274) 评论(0) 推荐(0)
摘要: 推荐两篇学DLX的博文:http://bbs.9ria.com/thread-130295-1-1.html(这篇对DLX的工作过程演示的很详细)http://yzmduncan.iteye.com/blog/1151695(这篇对精确覆盖与重复覆盖解释的简洁清晰,模板来自这篇博文)以下转载:DLX解决9*9的数独问题,转化为729*324的精确覆盖问题行:一共9*9*9==729行。一共9*9小格,每一格有9种可能性(1-9),每一种可能都对应着一行。列:一共(9+9+9)*9+81==324种前面三个9分别代表着9行9列和9小块,乘以9的意思是9种可能(1-9),因为每种可能只可以选择一个 阅读全文
posted @ 2013-08-17 19:07 冰鸮 阅读(280) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 25 下一页