自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AC_Arthur的专栏

Always challenge miracles!

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

原创 HDU 5441 Travel(并查集)

题目链接:点击打开链接思路:题目要求有多少对点(a, b)使得a到b的最短路上最长边不超过x。 我们将边从小到大排序, 用并查集来维护关系, 这样, 对于当前加入集合的一条边(a, b),权值为c, 他就是当前集合的最长边, 那么不大于c的对数就是就是这两个集合的个数的组合。 预处理一下即可。细节参见代码:#include #include #include #include

2016-07-31 13:52:26 630

原创 HDU 5773 The All-purpose Zero(DP)

题目链接:点击打开链接思路:首先一点:我们把所有0都用上是肯定不亏的。接下来:我们把剩下的非0数求LIS, 但是, 这些0有可能不能全部插入LIS中, 那么势必要在LIS中剔出一些数。 一个很简单的方法, 我们把每一个数减去他前面的0的个数, 这样, 相当于先为0留出了空间, 因为是全都减小, 相对大小是不变的。细节参见代码:#include #include #inclu

2016-07-28 21:30:51 1484 1

原创 HDU 4588 Count The Carries(规律)

题目链接:点击打开链接思路:数电中, 写真值表的时候, 我们是按照一定的规则写的。 按照这个规则, 我们可以知道比一个数小的数中, 每一位有多少个1。  所以, 对于每一位, 进位数就是1的个数除以2加上上一次进位的个数再除以2向下取整。细节参见代码:#include #include #include #include #include #include #include

2016-07-27 20:06:41 608

原创 Codeforces Round #363 (Div. 2)题解

这场比赛水了4个题。 部分题解如下:A. Launch of ColliderA题:我们每次遇到一个L, 就找到上一个R,他们肯定是比较近的, 这些中最近的就是最近的辣。细节参见代码:#include #include #include #include #include #include #include #include #include #inclu

2016-07-20 20:49:59 1464

原创 Codeforces Round #305 (Div. 1) B. Mike and Feet(并查集)

题目链接:点击打开链接思路:我们把元素从大到小排序, 从大到小依次合并区间, 对于第i个数, 如果他相邻左边的数比他大就合并, 相邻右边也一样。这样, 我们就求出了第i个数为最小值的最大区间。 更新答案即可。细节参见代码:#include #include #include #include #include #include #include #include #in

2016-07-17 16:53:52 1215

原创 POJ 2796 Feel Good(并查集)

题目链接:点击打开链接思路:该题转化一下, 就是枚举每一个数, 找到以这个数为最小值的最大区间(因为没有负数)。  那么一个办法是预处理出每一个数左边第一个比他大的数的位置, 和右边第一个比他大的数的位置, 这个可以用构造单调栈的线性算法处理出来: 我们构造一个单调上升栈, 标记栈里每个元素在实际中的位置, 加入一个元素a[i]的时候, 如果栈顶元素大于他, 那么将栈顶元素出队列, i就是

2016-07-15 16:55:08 1251

原创 UVA 536 - Tree Recovery(二叉树重建)

题目链接:点击打开链接思路: 二叉树有三种遍历方式, 体现在代码中, 就是:保存结点值如果是在递归前保存, 就是前序, 在递归完左子树后保存, 就是中序, 递归完左右子树后保存就是后序。由中序加上另一种, 我们可以写出剩下一种。   由前序遍历或者后序遍历, 我们可以依次知道父结点是什么, 然后在中序遍历中找到对应值, 那么该结点的左右子树分别在中序遍历中该位置的左右。 递归解决即可。

2016-07-14 15:34:22 1272

原创 Codeforces Round #271 (Div. 2) E. Pillars(线段树+DP)

题目链接:点击打开链接思路:类似于最长上升子序列, 我们很容易得到一个n^2的算法,  但是时间复杂度无法承受。可以发现, |a[i]-a[j]| >= d相当于对于每个j, 找到一个i = a[j]+d)中最大的dp[i]。  我们将数字大小离散化之后做线段树下标, 然后维护一个区间最大值就行了。 时间复杂度O(nlogn)细节参见代码:#includeusing namesp

2016-07-13 14:03:57 541

原创 SGU 311. Ice-cream Tycoon(平衡树)

题目链接:点击打开链接思路:最简单的思路是, 维护一棵平衡树, 以单价作为键值, 维护一个结点个数的信息。  然后类似寻找第K小的方法找到第n个小的价值处, 顺便维护总价值, 判断是否happy。然后就是删除操作。 我们从新从根结点开始, 沿路删除可以删除的子树就行了。 由于每次删除都是删除的叶子结点处, 所以不需要旋转操作。细节参见代码:#include #include

2016-07-10 20:53:48 1603

原创 Codeforces Round #358 (Div. 2) D. Alyona and Strings(DP)

题目链接:点击打开链接思路:类似于LCS, 只需用d[i][j][k][p]表示当前到了s1[i]和s2[j], 形成了k个子序列, 当前是否和上一个字符和上一个字符相连形成一个序列的最长序列和。细节参见代码:#include #include #include #include #include #include #include #include #includ

2016-07-09 22:03:07 1285

原创 Codeforces Round #360 (Div. 1) B. Remainders Game(中国剩余定理)

题目链接:点击打开链接思路:中国剩余定理, 请看维基百科:点击打开链接该题我们由已知可以写出n个线性同余方程:x % c[i] == a[i] % c[i]。那么中国剩余定理中明确指出。  我们可以知道 x % lcm(c[i]) 的值。   那么如果lcm可以整除k而不产生余数, 我们也就知道了x % k的值, 它就等于 x % lcm的值。细节参见代码:#include

2016-07-07 17:06:31 1399 2

原创 Codeforces Round #360 (Div. 1) C. The Values You Can Make(DP)

题目链接:点击打开链接思路:用d[i][j][k]表示, 前i个数, 选取的数之和为j, 再次选取的数之和为k的种类数。  那么当这种情况存在时, 我们把此时的k保存即可。细节参见代码:#include #include #include #include #include #include #include #include #include #include

2016-07-06 15:30:44 1475

原创 Codeforces Round #360 (Div. 1) A. NP-Hard Problem(二分图染色)

题目链接:点击打开链接思路:根据题目描述, 就是找两个不相交点集使得对于每一条边至少有一个顶点在点集中, 那么显然对于每条边必须是一个点在A集合, 一个点在B集合, 即二分图染色裸题。WA了一次, 因为有可能存在好几个连通图。细节参见代码:#include #include #include #include #include #include #include #i

2016-07-06 15:18:36 1467

原创 SPOJ 417 The lazy programmer(优先队列)

题目链接:点击打开链接思路:一开始一直在想, 对于当前的一个任务i,他到底应该花费多少合适, 因为会影响后面的决策。  后来才想明白一件事, 对于当前这个任务, 减少他的时间和减少之前任意一个任务的时间是等价的, 那么我们当然优先减少那些a比较大的。  如果当前这个任务无法完成, 那么就在之前的所有任务中找a尽量大的来减少时间。  显然, 是一定有解的。细节参见代码:#include

2016-07-04 21:27:36 1509

空空如也

空空如也

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

TA关注的人

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