bzoj3238.cc

#include #include #include using namespace std; typedef long long dint; #ifdef WIN32 #define lld “%I64d” #else #define lld “%lld” #endif #define _l (long long int) struct node { int l, i, ri; node *tr[26], *pr; node() { ri = l = 0; memset(tr, 0, sizeof(tr)); } }; struct edge { int t; edge *next; }; const int maxn = 1000009; char a[maxn]; int n, ni, f[maxn], sz[maxn], d[maxn]; dint ans; edge ebuf_arr[maxn], *ebuf(ebuf_arr), *head[maxn]; node nbuf_arr[maxn], *nbuf(nbuf_arr), *l, *srt, *scur;...

April 3, 2015 · 2 min · laekov

bzoj3238 [Ahoi2013]差异

考试的时候do big die去刷bzoj.大概下午会hug zero. sam的第二题.其实这个玩意是应该用sa做的,不过现在我觉得sa没有sam简单.虽然sam的构造和性质还是一团大雾. 这个题可以做出原串的后缀树,然后在上面dp一下.每个点对答案的贡献为任意两个不在同一子树的终态对数*深度. 然后倒过来建sam,它的parent树就是原串的后缀树.虽然我还没有成功理解这个东西. 然后坑了一会的一件事情是新建的nq节点的right集合为空.因为它只是一个扩展点,但是不是一个接受态ovo 我还是太弱啊怎么办.

April 3, 2015 · 1 min · laekov

20150402

上午讲数据结构ovo感觉不少东西都比较科普向.比如"我们来看看怎么用fft匹配01串". 然后讲的字符串题还比较能思考.后缀自动机啥的学得还是不够扎实啊. 下午考试ovo 第一题感觉就是数颜色搬到了树上再卡一下空间嘛.于是树状数组套sbt就上了.于是就被卡常数只有40了.就多了那么几百毫秒怎么也优化不下来啊.趴了.然后正解要利用树的特殊性来做到O(n*logn).非常ovo 第二题shen me gui.做法差不多想到了不过还是没有勇气去写单调队列. 第三题std写慢了吧.然后还把一堆写朴素的家伙都放过去了.严重地不爽.然后反正我分块我无压力ovo 所以我还是太弱了啊.

April 2, 2015 · 1 min · laekov

bzoj3772.cc

#include #include #include using namespace std; typedef long long dint; #ifdef WIN32 #define lld “%I64d” #else #define lld “%lld” #endif #define _l (long long int) struct seg { int s; seg *ch[2]; }; struct edge { int t; edge *next; }; struct path { int u, v; inline void read() { scanf("%d%d", &u, &v); } }; const int maxn = 100009; const int maxl = 19; seg sbuf_arr[maxn * maxl], *sbuf(sbuf_arr), *rt[maxn]; dint su, sd; int n, m, ut[maxn][maxl]; int d[maxn], dfo[maxn], dfb[maxn], dfe[maxn]; edge ebuf_arr[maxn « 1], *ebuf(ebuf_arr), *head[maxn]; path q[maxn];...

April 1, 2015 · 4 min · laekov

bzoj3772 精神污染

idy又开坑辣,虽然是个无聊的无聊题. 考虑每条路径会被哪些路径包含.那条路径的两个端点一定是在条路径的两个端点的子树上.(如果这两个点有祖先关系,那么需要重新makeroot一下) 当然我不是说要用Lct.直接用可持久化线段树在dfs序上把路径存下来就完了.

April 1, 2015 · 1 min · laekov

bzoj3509.cc

#include #include #include #include using namespace std; typedef long long dint; #ifdef WIN32 #define lld “%I64d” #else #define lld “%lld” #endif #define _l (long long int) struct cplx { double r, i; cplx() {} cplx(double rx, double ix) { r = rx, i = ix; } }; inline cplx operator +(const cplx& a, const cplx& b) { return cplx(a. r + b. r, a. i + b. i); } inline cplx operator -(const cplx& a, const cplx& b) { return cplx(a....

April 1, 2015 · 3 min · laekov

bzoj3509 [CodeChef] COUNTARI

好难得自己去开坑hhhhh 其实之前看过做法,觉得有点麻烦.于是拖到现在.然后荣登最慢yeah.不知道那些又短又快的东西是怎么来的.肯定和我不是一个写法的啦. 我的做法是把序列每b个分成一块.对于同一块,直接b2求内部有三个点或者两个点的等差三元组的数量. 对于分别在3块的,对每块把两边的所有东西卷积一次来统计. 其实也没啥技术含量ovo

April 1, 2015 · 1 min · laekov

bzoj2395.cc

#include #include #include using namespace std; typedef long long dint; #define _l (long long int) struct edge { int a, b, va, vb; inline void read() { scanf("%d%d%d%d", &a, &b, &va, &vb); } }; struct sptree { int va, vb; sptree() {} sptree(int ao, int bo) { va = ao, vb = bo; } inline dint prd() const { return _l va * vb; } void disp(int x) { printf("(%d,%d)%c", va, vb, x); } }; inline bool operator <(const sptree& a, const sptree& b) { return a....

April 1, 2015 · 2 min · laekov

bzoj2395 [Balkan 2011]Timeismoney

谁说最小乘积生成树是取log了ovo题意都不一样好么. 首先这个东西一定在一个像是下凸壳一样的东西上.其实是一个反比例函数的k的最小值. 把x和y的和看作坐标,求在(x0,y0)与(x1,y1)中间的一个点,为了平均分配,要取那个三角形最大,于是可以用叉积弄出一个式子来当作x和y的系数,这样就可以直接kruskal求最小生成树了. 如果求出来的点在这个线段上,那这个区间就不用再找了.否则还得去两边继续递归. 然后最初的左端点和右端点就取x的最小生成树和y的最小生成树就好了. 这个时间复杂度似乎还是没有保证啊.有点像自适应simpson的感觉,虽然这个肯定是精确的.然后跑起来也比较快.有意思. 这个玩意还是比较好写的.虽然中间kruskal把0打成1,看了半天ovo

April 1, 2015 · 1 min · laekov

20150401

说好了今天不去学校的ovo 于是在家里睡到9点半,起来吃饭,看题,帮ant选电脑,写题,出去吃饭ovo时间好紧. 居然是今年jsoi的题. 第一题水水的树形dp啊.其实都不能叫dp,把所有子树排序看一下就完了. 第二题看题面好长好麻烦不写了.于是交了个根据n的范围来wtf的东西.于是被逼唱歌.也只有这有一个字母能形容我的心情ovo. 第三题不就是树化简+无根树哈希么.随便乱写了个东西交上去居然过了ovo 所以我还是太年轻辣.

April 1, 2015 · 1 min · laekov