自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

slowlight93的专栏

Keep moving.

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

原创 poj 3667 Hotel(线段树中级,区间合并)

题意: 。。。 思路: 类似动态的最大连续和。 这里我们需要构建一个查询 最靠左的长度不小于D的区间的操作。 可以分类讨论 lc = left child, rc = right child 0)max[o]<Dmax[o] < D 不存在,直接返回 1)lmax[lc]>=Dlmax[lc] >= D 左半区间查询 2)rmax[lc]+lmax[rc]>=Drmax[lc]

2015-04-29 16:32:53 443

原创 poj 1436 Horizontally Visible Segments(线段树基础,区间染色,拆点)

题意: 。。。 思路: 首先按x排序,, 然后一条一条覆盖上去,当前为i,如果可以同时看到x和y,且x和y互相能看到,答案加1。。 统计的部分暴力就能ac。。 关键点:相邻整数之间的部分被当作看不见了。。不如x相同的两条 (1, 2) (3, 3)…(2, 3)之间其实是可以看过去的,所以要拆点。int xi[Maxn], y1i[Maxn], y2i[Maxn], rk[Maxn];

2015-04-24 21:41:24 444

原创 poj 3225 Help with Intervals(线段树进阶,处理区间,拆点)

题意: 求区间的交,并,补,对称差。。 思路: 为了表示开闭区间,用偶数表示闭区间端点,奇数表示开区间的。 [2,3) -> 4, 5 (3, 7) -> 7, 13 集合操作可以分解为两种,set和xor。。 先实现这两种操作,再讨论情况。。const int Maxn = 65550*2;#define lson(x) ((x)<<1)#define rson(x) (((x)<

2015-04-24 19:28:41 459

原创 【记录】wxwidgets

今天去看了下,发现他的社区非常活跃。。 于是安装起来搞搞。。 documentation github codeblock + wxwidgets

2015-04-24 00:43:22 438

原创 hdu 5115 Dire Wolf(DP进阶)

题意: 。。。 思路: 很典型的O(n3)的区间dp,类似矩阵链乘,能量项链这种。 不过肯定有些微区别。 我们尝试用类似的方程来解决,注意到在前两个问题中,存在一个固定的首尾。。 所以设计dp[i][j]dp[i][j]为除了首尾,消灭中间的狼的最小代价。。 添加0,n+1这两条虚拟的狼。。 答案就是dp[0][n+1]dp[0][n+1]LL a[Maxn+5], b[Maxn+5

2015-04-23 20:25:42 686 1

原创 hdu 3954 Level up(线段树进阶)

题意: 。。。 思路: 容易想到每个节点,需要维护,(最大exp,最大lev,tag)。 问题在于,区间内每个人的等级是不同的,不能统一维护。。 像exp[child] += lev[child] * tag[now];tag[child] += tag[now]这样的代码只能够在区间内没人升级的时候正常工作。。 当前区间有人升级的时候,我们便跟新子区间,将他升级。 所以,我们在叶子

2015-04-23 15:15:43 696

原创 hdu 3487 Play with Chain (Splay tree基础)

题意: 最基本的维护数列。 提取区间,懒惰标记。。 思路: 先推入0和n+1两个元素,以方便处理边界情况。 用到的基本操作:insert,select(选取kth,0-indexed),splay 1)提取区间[a, b] splay a-1th 到根,splay b+1th 到根的右孩子,则 b+1th 的左子树对应该区间。 2)反转区间 先反转自己的标记,标记向下传递(访问之前

2015-04-22 16:34:35 621

原创 【算法笔记】伸展树 Splay Tree

资料基本入门的就去看看: 《The Magical Splay》、《伸展树的基本操作与应用》吧 参考code: 有top-down和down-top两种,貌似竞赛里面都写自底向上的,可能是好维护size把。。 我用的是CLJ风格的。。。(他的代码太精炼了。。struct node { node *ch[2], *p; // 左右子节点,父亲节点 int key

2015-04-21 23:50:23 493

原创 whuoj 1566 Spanning Tree (动态MST,简单)

题意: G是一个无向连通图。向G中加Q次边,求出每次加边后MST的权值。 思路: 该问题属于“动态最小生成树问题”,关于该问题,有几种高效算法。。 不过,因为这里数据规模不大,我们用稍微暴力一点的方法就能过了。 如果修改了一条原本不在MST中的边的值,或者新加入一条边,那么该边就有可能取代MST中的一条边。 将这条边加入MST中,会得到一个环,去掉环上最大的边,就是新的MST。 证明一

2015-04-20 02:21:05 918

原创 【算法笔记】Size Balanced Tree

资料: C++实现 Size Balanced Tree PPT 论文译文练习题目: poj 3481

2015-04-19 00:22:53 825

原创 poj 3481 Double Queue(平衡二叉树基础练习题)

题意: 。。。 思路: 这道题用来作SBT的练习了。。。// SBT节点,固定域 l, r, sz// 需要一个key来比较大小struct node { int l, r, sz, val, K; node (int x=0, int y=0):l(0), r(0), sz(0), val(x), K(y){}};struct SBT { node a[Maxn

2015-04-19 00:15:49 2182

原创 【笔记】Haskell

Functional Programming经常听人提及函数式编程,“函数式编程只做一件事,定义”,“函数式编程将会是下一个主流的编程模式”。。 于是找了个介绍的MOOC,由于用的是Haskell,所以顺便学下。。。 课程名:EDX FP101XHaskell运行环境课程推荐GHCi(类似一个解释器),Windows下直接安装 GHCi基本命令:load name load script na

2015-04-15 21:07:43 588

原创 srm 310 div2 1000(BIT基础, 二分)

题意: 给一个长为N的非负整数序列。然后K长的滑动窗口。 求窗口经过区间的中值之和。 思路: 每次把出去的元素-1,进来的+1。二分前缀和为(K+1)/2的值。const int Maxn = 65535+1;int tree[Maxn+5], a[250001];int sum (int x) { int ret = 0; while (x > 0) {

2015-04-15 16:30:58 461

原创 【算法笔记】Binary Indexed Tree

资料收集topcoder上的教程 上面教程的中译版 WiKi简单说说BIT尽管叫做树,但还是很难形象的把它和树联系起来。而且在初学的时候很难理解lowbit的是怎么来的,为什么要这么维护。。 其实我还是觉得能发明BIT这个东西,确实很奇妙。。。 BIT的主要用途就是维护前缀和,中心思想是用n个节点,每个节点各自负责 2r2^r长的一段连续和。对于一个节点i,r是i最低位的1的位置。 r(1

2015-04-15 16:25:41 494

原创 ZSTUOJ 4191 无向图找环(DFS应用,经典)

题意: 在一个联通的无向图上,判断是否存在边异或值大于0的环。 思路: 觉得蛮经典的一题。很多图论题都要求先来一遍dfs预处理,熟悉这样的性质非常有用。 一开始想到记录从0开始的xor值。 但是,纠结在怎么一次dfs求出多个环的值。。。 实际上,只要记录边的访问状态。在dfs后再枚举边进行判断就ok了。。 (link)[http://oj.acm.zstu.edu.cn/JudgeOn

2015-04-14 23:18:35 2965

原创 srm 655 div2 1000(DP进阶,枚举状态)

题意: 给一个数组a,长度n。对应一个n位数,可以有前导0。 有N个问题,每个问题对应着一些数位,即问题i对应第i个bit为1的数位(从最低位开始)。 对于每个问题,要求把对应的数位连起来构成的数,mod9结果为0。 问有多少个满足条件的数。 思路: 首先mod9有个很重要的性质,即x mod 9 = (x所有数位之和)mod 9 对于一个问题,简单dp就可以解决。 但是再来一个问题

2015-04-14 22:45:43 498

原创 srm 299 div2 1000(强连通分量缩点,拓扑)

题意: 空间中有多个粒子碰撞。i,j碰撞有三种情况。 1)nothing happen 2)i disappear 3)j disappear 求最后可以剩下最少的粒子数 思路: 强连通分量最后只能剩下一个,如果外面有边连进来,则全部消失。 所以先求DAG,然后数根的个数。const int Maxn = 50;int vis[Maxn+5];class StrangePartic

2015-04-14 11:28:12 516

原创 tyvj 1427 小白逛公园(线段树中级,单点修改,动态最大连续和)

题意: 区间[1, n],开始给出初值。 m个操作,包括单点修改和区间最大连续和询问。 思路: 重点在两个地方 1)维护,最大连续和可能在左半区间或右半区间,也可能跨越中点,为此我们需要对一个节点维护最大前缀和,最大后缀和,最大连续和,总和这四个变量。 2)查询,一个区间查询,覆盖了树上一些连续的节点,所以我们应该在查询的过程中把这些节点,相邻的两两合并,最后合并成一个节点返回。stru

2015-04-13 22:51:41 1163

原创 poj 1635 Subway tree systems(树的同构,经典)

题意: 一个有根树。给一种用01序列来表示该树的方式,0表示前进(沿没有访问过的边),1表示沿树边回退。 一个树当然会有多种表示, 问题是给出两个序列,问是否表示同一颗树。 思路: 感觉判断树的同构是个很广的问题。 不过就此题而言,可以对一颗树的所有表示序列,都可以用递归的方式把它们变成一个。(先划分子树,按字典序重排) 也有用dp做的,还有哈希的。。是很值得研究的一题 这道题引起我对

2015-04-12 01:04:28 607

原创 【笔记】C++中一些易混淆的知识点

Note文章的知识点基本来自于《C++ Primer》,其中的观点可以看作是对原文的翻译Public,Protected,Private三种继承方式派生类在继承列表中通过在基类名字前加上权限标签来确定继承方式。class Derived:Public Base {};class默认Private方式继承,struct则是Public。 被继承元素的访问权限是由基类中的标签和派生类的继承列表中的权

2015-04-09 16:31:34 458

原创 srm 308 div2 1000(DP, 离散背包+连续背包)

题意: n个背包,有的可以拆分,有的不能拆。给定Weight求最大值。 思路: 离散和连续的分别求一下。然后枚举i,W-iclass TreasuresPacking{ public: double maximizeCost(vector <string> treasures, int W) { vector<node> dis

2015-04-09 00:53:51 1101

原创 srm 307 div2 1000(数论,枚举)

题意: 有4正整数因子的自然数被称为preprime数。 求第n个preprime数。 思路: 可以得出结论,仅当某个数是两个素数的乘积或者是某个素数的3次方时为preprime。于是可以用类似素数筛法的方式,得到关于某数素因子数目的表(除自身外)。。 其实还可以更暴力,直接从2开始枚举,然后每个包含其作为因子的数的计数器加1。。。const int MAX = 6000000;int

2015-04-08 21:56:42 515

原创 srm 306 div2 1000 (字符串dp,进阶)

题意: 有一个原串s和一个目标串t。 向s插入一些串,这些被插入的串被称为block,使得s与t相同。 求最少插入多少block达到目标。 思路: O(n3)的做法:设i,j分别是s,t中的下标。那么方程描述为:把从i开始的s的字串变成从j开始的t的字串最少插入的block。 决策有两种,分别对应s[i]=s[j]和s[i]!=s[j]: 1)相等:转移到dp(i+1, j+1) 2

2015-04-08 18:18:47 412

原创 srm 305 div2 1050(bfs中级)

题意: 背景赞一个! 经典的羊和狼乘船过河问题。这里换成了牧师和野人。。 思路: 基本的bfs即可。。不需要技巧。。struct St { int m, c, b, cnt;};int f[105][105][2];class Cannibals{ public: int check(int lc, int lm, int rc, int rm) {

2015-04-07 20:37:08 386

原创 【杂】笔试题

复杂链表的复制描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。 代码:/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x

2015-04-07 13:29:33 434

原创 leetcode 刷题

Binary Tree Right Side ViewTag:dfs,bfs 题意: 给你一颗二叉树,求从上至下输出,从右边看过去能够看到的节点。 1 <— / \ 2 3 <— \ \ 5 4 <— 输出[1, 3, 4] 思路: 用一个vector存储每一层的最右边,然后dfs

2015-04-07 11:39:17 605

原创 zoj 3640 Help Me Escape(概率DP基础)

题意: 。。。 思路: 题面给了个大大的公式可能会吓到人 = =。。 不过看懂题就没什么了。 普通的概率dp,甚至不用变换方程式 = =! Ei=P∗(∑(Ei+cj,i<=cj+1)+tj,i>cj)E_i = P*(\sum{(E_{i+c_j, i<=c_j}+1})+t_{j,i>c_j}) 边界是E[i],i>max{cj}E[i], i>max\{c_j\}int n, f

2015-04-05 22:15:06 468

原创 hdu 4035 Maze(概率DP进阶,树形DP)

题意: 给你一棵树(也可能是森林) 站在每个节点时 1)有ki的几率回到节点1 2)有ei的几率离开 3)随机移动到一个相邻的节点 最开始在1,求离开需要移动的次数的期望。 思路: 一开始打算直接上方程然后求解线性方程组来着。。 后来发现判断无解难以处理(1e5的数据。。) 1)方程很容易写出来,注意我们是在树上进行dp,所以最好区分father和children 2)边界是叶

2015-04-05 21:04:24 442

原创 zoj 3329 One Person Game(概率DP基础)

题意: 。。。 思路: E[i]E[i]为当前分数为i时,到游戏结束时掷骰次数的期望。 E[i]=∑Pk∗Ei+k+P0∗E0,P0=1/(k1+k2+k3)E[i] = \sum{P_k*E_{i+k}}+P_0*E_0, P_0 = 1/(k1+k2+k3) 我们要求的是E[0],,边界是E[j]=0,j>nE[j] = 0, j>n 假设E[i] = ai * E[0] + bi

2015-04-05 20:46:48 402

原创 poj Round Numbers 3252(数位dp进阶)

题意: 统计区间内0的位数大于等于1的位数的二进制数。 ex:[1, 4]中有2(10), 4(100) 思路: 数位dp,f[pos][前面0的个数][前面1的个数]f[pos][前面0的个数][前面1的个数]是要记忆化的状态int d[35], f[35][35][35];// limit:是否达到上界// nolead: 没有前导0int dp (int pos, int lim

2015-04-03 14:36:17 496

原创 poj 1830 开关问题(线性方程组,高斯消元)

题意: n个开关,给出初态和终态。 还有一些关系对(i,j),表示切换第i个开关状态后第j个开关状态也会切换 求有多少种方法从初态到终态。 思路: 详细题解传送 方程怎么列出来的参照上面的题解。。。 这里因为我们用的是异或操作。所以在消元的时候也要通过异或来消。 但是,困扰我很久的是为什么直接异或系数等式仍成立? 下面简单地证明一下: x∗(a xor b)=(x∗a) xor

2015-04-01 02:08:47 651

空空如也

空空如也

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

TA关注的人

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