学姿势
文章平均质量分 64
leodestiny
这个作者很懒,什么都没留下…
展开
-
HDU 2467 Déjà vu IDA*
题意:一个机器内有M个开关,每个开关表示00~ 2n−12^n - 1之间的数字,并且每个每个数字的二进制表达中,有且只有三个1。一个数字Y通过M个开关得到的结果为: Y⊕X1⊕X2⊕...⊕XMY \oplus X_1 \oplus X_2\oplus ...\oplus X_M 现在给出初始的数字S,和目标的数字T,想用最小的开关个数,使S变成T,求出最小的开关数。如果不可能输出,impos原创 2015-03-22 17:44:48 · 1047 阅读 · 0 评论 -
单机调度问题
转载自:http://my.oschina.net/mustang/blog/56542假设有一台机器,以及在此机器上处理的n个作业a1,a2,...,an的集合。处理作业aj所需的时间为tj,作业aj的完成带来的收益为pj,作业aj完成的最后期限为dj。机器在一个时刻只能处理一个作业,而且如果某作业被处理,那么一定要在连续的时间内进行处理。如果某作业aj在最后期限dj之前完成,则获得转载 2015-02-03 08:20:08 · 7528 阅读 · 0 评论 -
POJ 3714 Raid 最近点对 扫描线
题意:有N个士兵,N个炮台。给出这2N个点的坐标,求士兵距离炮台的最近距离。思路:前面用分治法解决了这个问题,但是这个问题还能通过扫描线的方式进行乱搞,但是中间检查的范围是和分治法一样的。 首先按照x坐标进行排序,然后在map中我们实时维护和当前点的x坐标差不大于d的点的集合。 因为map中是按照y坐标有序的排列的,我们用lower_bo原创 2015-01-25 23:18:04 · 980 阅读 · 0 评论 -
POJ 3420 Quad Tiling 线性递推 矩阵快速幂
题意:给出一个4 * N的方格。用1 * 2的格子去填充,问有方案数。思路:以前做过填充格子的轮廓线DP。但是因为N 但是注意到所有格子都是可以放1*2的格子的,而不是像其他的题有某些障碍,是没有办法放置。 类比轮廓线DP的思路,我们可以以一行为转移单位。枚举前一行的所有可能的情况,对于每种情况,将没有填满的空填满。这样就转移到了下一行,继续进行上面原创 2015-01-26 17:01:03 · 1028 阅读 · 0 评论 -
POJ 1077 Eight 八数码问题 BFS
题意:经典的八数码问题,给出现在的8个数码的位置,求出最少的移动方法,使之变成有序的八数码。思路:在这里就用BFS。对于这道题,实际上要处理的就是已经访问状态的记录和查重。 可以有一下方法:1.用set。这样常数比较大,对于这道题用set查重就会超时。 2.康拓展开,因为这是相当于8原创 2014-11-26 00:20:54 · 642 阅读 · 0 评论 -
HDU 5032 Always Cook Mushroom 极角排序 数状数组 姿势
题意:在1000*1000的格子上,每一个格子的值为(x)原创 2014-10-15 21:16:44 · 574 阅读 · 0 评论 -
HDU 4821 String 字符串hash map的妙用
题意:给出一个字符串。求有多少个原创 2014-10-01 23:54:55 · 662 阅读 · 0 评论 -
HDU 5047 Sawtooth 公式
题意:在一张纸上,会有N个原创 2014-09-28 09:43:26 · 567 阅读 · 0 评论 -
手动扩栈
1.G++的姿势 int size = 256 << 20; // 256MB char *p = (char*)malloc(size) + size; __asm__("movl %0, %%esp\n" :: "r"(p));原创 2014-09-28 16:59:05 · 1616 阅读 · 0 评论 -
枚举子集
对于一个用位来表示的集合,我们可以枚举其子集。设集合为sup,枚举的子集为sub按照递增的顺序枚举的话,如果只是简单的(sub+1)&sup的话,会出现前后没有发生变化的问题。应该用下面的形式:for(int sub = 0; sub != sup; sub = (sub - sup) & sup)具体原因:应该是利用了补码的不对称性,但是我好想解释不清楚。。。按照递减的顺序枚举的原创 2015-02-03 16:49:52 · 1736 阅读 · 0 评论 -
多重背包的两种求解形式
1.将多重背包转化成01背包求解。 即将物品的数量M按照二进制分解成 M = 1 + 2 + 4 + ... + 2 ^ k + a. 然后对这些物品进行01背包。 如果没有求具体方案的,我们可以在求解的过程中进行分解,而不保留对应的物品。 具体代码如下: for(int i = 0; i < N; ++i){ int num = m[i];原创 2015-02-05 09:49:55 · 1008 阅读 · 1 评论 -
HDU 4281 Judges' response 状态压缩 01背包 MTSP
题意:比赛上,有N个选手提出了问题,解决每个选手的问题需要的时间是Ci。现在每个裁判至多能为选手解答时间长为M的问题。至少需要几个裁判才能解决所有的选手的问题。 同时,给出每个选手的位置坐标xi,yi.希望所有裁判从起始点出发,解决完所有问题,再回到起始点,所走的距离和最小。思路:其实这两问的答案是基本没有关系。唯一的关系,就是如果第一问没有解的话,第二问也是没有解的。原创 2015-02-03 14:31:27 · 801 阅读 · 0 评论 -
用栈将递归转化为非递归
在竞赛中如果系统栈很小的话,过深的递归会让栈溢出,这个时候我们就要自己手写栈,将递归转化成手工栈。 方法其实也很简单。 基本思路上,我们就是用栈不断的pop,push。但是何时push,何时pop呢? 在《算法导论》上对深度优先遍历树的讲解中,在深度遍历中,会对每个节点进行染色,白色为没有被访问过;灰色为被访问过,但是该节点的所有子树还没有完成访问;黑色,节点被访问过,而且该节点的所有子树都被原创 2015-03-16 08:40:05 · 3994 阅读 · 0 评论 -
UVA 1608 Non-boring sequences 递归分治
题意:定义一个序列为不无聊的,当每个子序列都包含一个唯一的数字。反之,这样的序列为无聊的序列。给出一个序列,判断该序列是无聊的序列还是不无聊的序列。思路:注意到:如果某个序列中包含一个唯一的数字,那所有跨过该数字的序列都是不无聊的,所以我们只需判断其左右是否是不无聊的序列即可。 上面的形式非常像分治法,所以我们看看能不能利用分治进行求解。 首先要原创 2015-01-23 20:16:28 · 2033 阅读 · 2 评论 -
矩阵快速幂中矩阵的构造技巧
对于出现线性递推的题目,当直接暴力计算的复杂度太高时,我们可以考虑用矩阵快速幂进行加速。因为虽然矩阵乘法的复杂度为O(n^3),但是通过二进制分解,整体的复杂度变成了 log(n^3) = 3logn = O(logn),复杂度是对数级别的,非常小。但是矩阵快速幂的难点就是在如何构造矩阵来完成计算。因为矩阵快速幂是用来加速线性递推的,所以最核心的部分就是线性递推公式。最经典的就是斐原创 2015-01-25 23:09:13 · 2109 阅读 · 0 评论 -
HDU 1007 Quoit Design 最近点对 分治法
题意:有N个玩具,给出这些玩具的点的坐标。求出一个半径最大的圆环,使这个圆环至多能套进一个玩具。思路:圆环至多能套进一个玩具,当且仅当圆环的直径小于等于任意两点的距离。这样就转化成了最近点对问题。 对于最近点对问题,同样是用分治法进行处理。 首先,对所有点按照x坐标从小到大进行排序,按照x坐标将点分成两半。 同样,分治后有原创 2015-01-24 18:42:55 · 606 阅读 · 0 评论 -
四边形不等式优化DP
四边形不等式作为一种优化手段,可以加速某一些的动态规划转移。 其主要思想是利用决策变量的单调性,来减少状态转移过程中的决策,从而降低时间复杂度。 其中动态规划的转移方程会有如下的特征: 一.dp状态为二维,或者说可以表示成区间。 一般常见的形式为:dp[i][j]=min(dp[i][k]+w[k+1][j]),1≤k<j dp[i][j] = min (dp[i][k] + w[k+1]原创 2015-02-26 23:45:26 · 756 阅读 · 0 评论 -
HDU 3507 Print Article 斜率优化DP
题意:Zero有一台老式打印机。他想打印一篇有N个单词的文章,每个单词有花费C i C_i。在这台打印机上一行打印k个单词的花费为(∑ k i=1 C i ) 2 +M (\sum_{i=1}^{k} C_i)^2 + M,其中M为定值。求出Zero打印这篇文章的最小花费。 思路:可以注意到这个问题有重叠子问题和最优子问题。所以我们考虑从动态规划的角度来解决这个问题。 定义dp[i]为打印前i原创 2015-02-24 10:47:36 · 475 阅读 · 0 评论 -
关于进制的几道题
1.给出一堆数,其中一个数出现了1次,其他的所有的数出现了2次。求出现了一次的数。这个就是很简单的异或操作了。#include using namespace std;int main(void){ long long ans,a; int N; while(~scanf("%d", &N)){ ans = 0; for(i原创 2014-10-03 20:08:55 · 663 阅读 · 0 评论 -
斜率优化DP
当DP的时间复杂度大于时限的时候,我们就要对DP进行优化。其中一个比较常用的就是用单调队列优化DP。 单调队列优化DP的思想是:减小最优解的搜索空间,提高状态转移的效率。和搜索中的剪枝一样。 单调队列通过下面的操作来缩小最优解的空间: 1.队首元素保留最优解。不是最优解的队首元素需要被删除。 2.整个队列保持单调性或者是下凸性。新加入的元素如果破坏这条性质,需要从尾部把旧元素删除,直到该性质原创 2015-02-25 20:27:57 · 641 阅读 · 0 评论 -
HDU 5050 Divided Land JAVA GCD
题意:给出二进制表示的正方形原创 2014-09-27 20:03:03 · 695 阅读 · 0 评论 -
UVA 140 Bandwidth 暴力模拟
题意:给出一个n个节点的图G和一个节点的原创 2014-09-18 00:13:38 · 798 阅读 · 0 评论 -
平面坐标变换 矩阵形式
转http://learn.gxtc.edu.cn/NCourse/jxcamcad/cadcam/Mains/main11-2.htm2.3.3 基本二维变换 基本二维变换有比例变换(Scaling)、旋转变换(Rotating)、错切变换(Shearing)和平移变换(Translating)。 1)比例变换 比例变换就是将平面上任意一点的横坐标放大或缩小S11转载 2014-09-27 21:36:26 · 10167 阅读 · 0 评论 -
二分的姿势的选取
1.解的范围为实数,可以直接这样原创 2014-08-17 11:21:49 · 688 阅读 · 0 评论 -
BOJ 488 小妹妹个数
题意:给出数字n(1原创 2014-08-07 23:17:30 · 567 阅读 · 0 评论 -
介绍四种GCC内置位运算函数
int __builtin_ffs (unsigned int x)返回x的最后一位1的是从后向前第几位,比如7368(1110011001000)返回4。int __builtin_clz (unsigned int x)返回前导的0的个数。int __builtin_ctz (unsigned int x)返回后面的0个个数,和__builtin_clz相对。int __b转载 2014-09-11 01:15:58 · 562 阅读 · 0 评论 -
HDU 5036 Explosion 概率 期望
题意:给出n个箱子。每个箱子上都有锁。某些箱子内原创 2014-09-22 01:01:34 · 1603 阅读 · 0 评论 -
HDU 4433 locker 状态压缩DP
题意:给出一个长度最长为1000的原创 2014-09-11 00:48:54 · 600 阅读 · 0 评论 -
HDU 4411 Arrest 费用流 建边技巧
题意:有(N+1)个城市,在城市0有警察总局,里面有K个警察。从城市1到城市N,每个城市都有盗贼。我们要派出警察消灭这些盗贼。警察的当第i个城市的盗贼被逮捕时,他们回向第i-1个城市发送警报,如果有盗贼收到警报,那这个行动就失败了。同时,派出警察会有原创 2014-09-08 23:24:57 · 494 阅读 · 0 评论 -
HDU 4967 Handling the Past 线段树 调用顺序
题意:对一个栈,有三种操作:pop,push,peak(查询当前栈顶)原创 2014-08-20 23:58:40 · 563 阅读 · 0 评论 -
HDU 4970 Killing Monsters 离线 差分
题意:有N个攻击塔,每个攻击他原创 2014-08-21 09:37:11 · 504 阅读 · 0 评论 -
BOJ 449. 排序
题意:对0-10000的一堆数进行排序。思路:由于输入文件有8.2MB,原创 2014-07-25 21:56:11 · 625 阅读 · 0 评论 -
字典树的姿势
姿势1:静态数组形式姿势2: 指针形式原创 2014-08-17 12:16:43 · 511 阅读 · 0 评论 -
关于浮点数
OI/ACM中经常要用到小数来解决问题(概率、计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制。 以下以GUN C++为准,其他语言(或编译器)也差不了多少。本文竞赛向。 一、基础篇1、一般浮点数使用double,范围为大概为-10^308 ~ 10^308,有效精度为15~16位10进制数。2、一般没事(比如内存问题)不用转载 2014-09-26 12:35:05 · 683 阅读 · 0 评论 -
Java中的回车换行符/n /r /t
windows下php开发环境配置 一种心灵的邀约Java中的回车换行符/n /r /t 2012-07-20 16:04:46| 分类:JAVA | 标签:|举报|字号大中小 订阅'\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。下面转一转载 2014-09-27 20:39:21 · 903 阅读 · 0 评论 -
UVAL 6145 Version Controlled IDE
题意:给三种操作 1.在p位置插入一个字符串.2.从p位置开始删除长度为c的字符串3.输出第v个历史版本中从p位置开始的长度为c的字符串解法:可以用平衡树做,但是不会.后来又听说可一用一个叫rope的神奇的STL,学习了一下,用法基本和string一样.roap的内部是用平衡树实现的,历史版本和当前版本可以共享一些内存,插入和删除整段字符串效率很高.是可持久化的数据结构.原创 2014-09-17 18:32:48 · 739 阅读 · 0 评论 -
HDU 4920 Matrix multiplication
题意:很简单,给出两个矩阵,求原创 2014-08-05 21:11:03 · 465 阅读 · 0 评论 -
HDU 4099 Revenge of Fibonacci
题意:给出一串长度不大于40的原创 2014-08-17 12:33:52 · 459 阅读 · 0 评论 -
HDU 4436 str2int 后缀数组 字符串哈希 前缀和
题意:给出N个数字序列,每个序列的子串都能组成原创 2014-09-12 15:29:08 · 756 阅读 · 0 评论 -
求二进制中1的个数
一、问题描述:求一个N位整数x的二进制表示中1的个数,越快越好。据说这是道很常见的面试题。原题是说如何在常量时间内算出32位整数的二进制表示中1的个数。实际上这么问是有漏洞的,因为按照最笨的方法,一个一个数,也不过32次,当然是常量时间。但如果你这么告诉面试官,十有八九会被骂白痴。因为大家一般都会认为32次实际上是O(N)的做法。所以这么问可能会更好一些,求一个N位整数x的二进制表转载 2014-09-16 13:41:58 · 718 阅读 · 0 评论