- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 [Spark浅析][1]概念及简单集群搭建
最近开始接触Spark,遇到了很多坑和困惑的地方,打算把它们写成一个文章系列,避免自己以后遗忘,更希望能帮助更多想学习Spark的人。本文所用的措辞若不另说明,则是根据自己的理解原创所得,具有一定的主观性,如果有的地方理解的不对还请各位不吝指出,在此感谢!一、Hadoop MapReduce和Spark简介、二者的区别与联系Hadoop MapReduce是一个分布式计算框架,稳定性好,普
2014-12-30 10:47:40 601
原创 HDOJ 2054 A == B ?
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2054这道题坑特别多:放几组数据:// 均为YES0.0 0.00-0 0-0. +.00.1 00.104 4+1 1-1 -1.01.0 1.0+.020 00.02代码如下(主要练习string的iterator):#include #i
2013-12-31 22:01:21 851
原创 利用reverse_iterator删除string末尾元素
先看代码:#include #include using namespace std;int main(){ string str = "Uranux~"; string::reverse_iterator strRIter = str.rbegin(); // 指向最后一个元素 string::iterator retIter = str.erase(--strRIter.
2013-12-31 21:53:05 1347
原创 C++隐式类型转换操作符
前几天看MFC时碰到了一个让我困惑不已的问题:CDC::Rectangle的某一个原型如下:BOOL Rectangle(LPCRECT lpRect);其中LPCRECT是const RECT* 但是诸如如下所示的调用也能通过编译:myDC.Rectangle(CRect(p1, p2));其中CRect是RECT的
2013-11-26 22:47:45 892
原创 Codeforces Div.2 213 C Matrix (预处理+哈希)
超级传送门:http://codeforces.com/contest/365/problem/C这场特别遗憾,A题题意看错WA了2次,C题溢出导致没能通过系统测试,如果C题过了就能排前30。题意是给你一个长度不超过4000的数字s,定义b[i][j]=s[i]*s[j],则可以得到一个矩阵b;又给你一个数a,求b有多少个子矩阵其和为a。例如:1012345a=10,
2013-11-20 21:16:14 948
原创 [VC++深入详解] 1. Windows程序内部运行机制
本系列(VC++深入详解)为《VC++深入详解》(孙鑫 编著)读书笔记,很多例子都是仿照此书,很多概念也是来自此书,在对其做归纳总结的同时,也加入了自己的一些理解。一、 最简单的Windows程序框架概览#include #include LRESULT CALLBACK WndProc( _In_ HWND hwnd, _In_ UINT uMsg, _In
2013-11-18 22:08:01 3830 1
原创 Codeforces Div.2 212 C Insertion Sort (DP)
超级传送门:http://codeforces.com/contest/362/problem/C这是一道以插入排序(Insertion Sort)为基础的动态规划题目,不熟悉插入排序请参考维基百科插入排序题目中给的插入排序代码如下所示:for (int i = 1; i < n; i = i + 1){ int j = i; while (j > 0 && a
2013-11-15 23:56:31 757
原创 HDOJ 3183 A Magic Lamp
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3183题意要删除m个数字,我们不妨是认为只能挑选n-m个数字,使得有序组合得到的数字最小。我们先来挑第一个,范围是原数的1~n-(n-m-1)即1~m+1 (注意要给后面的数字至少每个保留一个位置,此处下标从1开始计)。当然我们要在此区间里挑一个最小的数,假设这个数的位置是x,则接
2013-09-20 23:19:58 587
原创 用bis和bic实现所有位级操作
在Digital Equiment 的VAX计算机中,只有两种对位的操作函数:位设置bis和位清除bic。其中bis(x, m)表示对于m中为1的位,置x对应的位为1. bic(x, m)正好相反,对于m中为1的位,置x对应的位为0。参数m有个更常用的称谓——掩码。对于掩码你一定不陌生,子网掩码、颜色掩码... 简单地说,掩码就是个过滤器,滤掉我们不希望得到的东西。好了,扯远了,言归正
2013-03-27 22:31:21 2527 1
原创 ZOJ 3430 Detect the Virus(AC自动机+解码)
超级传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430本题思路清晰,不过解码确实繁琐,看来自己代码能力还有待加强。需要注意几个点:解码后的ASCII字符的范围是0~255,而且可能包含'\0',不能用char来存,最好用int。代码:#include #include #
2013-03-13 20:21:01 1018
原创 Trie引发的血案——再论参数
看到标题,或许聪明的你会说,参数不就那么回事吗?还要“再论”?在决定写这篇文章之前,我也是这么认为的,自认为对C/C++的参数传递以及压栈方式了如指掌。但是总有一些细节,在我们不注意的瞬间,给我们一个深刻的教训。以前自己写Trie,用的是静态内存,不够灵活,虽然ACM/ICPC或其他算法竞赛都会给出严格的数据范围,避免越界。但是在实际项目中,没有人会知道,没有人能够预测自己
2013-03-07 19:50:23 819
原创 HDOJ 4333 Revolving Digits(KMP+扩展KMP)
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4333本题需要注意一点,需要统计的只是不重复的数字,所以先要用KMP求出串的循环节,然后只取一个周期进行匹配就行。用扩展KMP进行匹配,母串为输入串的两倍扩展(便于表示循环位移),在匹配的过程中判断大小。代码如下:#include #include using n
2013-03-04 22:39:33 747
原创 HDOJ 4300 Clairewd's message(扩展KMP)
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4300本题题意是给你一个字符对应表,再给一个密文和明文相连接的串(明文后缀可能缺失),求补全后的串。比如样例:abcdefghijklmnopqrstuvwxyzabcdab为了方便,字符对应表是默认的。abcdab便是密文和明文相连接的串,记长度为m,我们需要找到分割点
2013-03-04 20:20:13 590
原创 POJ 1226 Substrings(KMP+枚举)
超级传送门:http://poj.org/problem?id=1226题意要求一个最长的串X,其或其反转串rev(X)在所有串中均出现过,输出X的长度。思路:先枚举第一个字符串的所有字串和字串的反转串,与剩下字符串进行串匹配,匹配过程中若二者有一个匹配成功则视为成功,从最长的字串开始枚举,第一个成功匹配的字串即为答案。代码(注意reverse函数调用的位置,我之前多调
2013-02-23 20:29:09 453
原创 POJ 2185 Milking Grid(二维KMP)
超级传送门:http://poj.org/problem?id=2185这道题网上很多其他的blog上的题解都是错的,由于题目自身数据比较水,便都混过去了。其中一种典型的错误解法是求出每一行/列的最小覆盖长度(ABCAB的最小覆盖长度就是3,即对应ABC),然后LCM,若结果大于串长,则取串长。这是一种典型的错误贪心,诸如:2 8ABCDEFABAAAABAAA这组数据
2013-02-23 18:29:32 1171
原创 线性时间复杂度字符串变换算法
在之前的一篇文章(百度2013年校招笔试题——pszStringRotate)中,我介绍了一种时间复杂度O(n),空间复杂度O(1)的字符串循环位移算法,其核心思想是交换和冲突处理。其实这只是线性时间复杂度字符串变换算法的一个特例——变换函数为f(x) = x + offset (offset为偏移,取全体整数)。倘若存在一个更一般的变换函数f(x),f(x)不一定是线性函数,甚至不可导或者不
2013-02-12 14:33:34 650
原创 Project Euler 54 Poker hands(模拟+hash)
超级传送门:http://projecteuler.net/problem=54 刚看到题目描述,就联想到天津Regional的A题麻将那题,可惜没能AC,遗憾了好久。这题比麻将那题要简单一些,规则描述比较清楚,要比较两手梭哈牌的大小,我用了hash来存牌,定义了各种判定判断函数来进行判断。代码量还是比较大的,差不多600行,写的过程中很容易错。Unix/Linux设计思想——小即
2013-01-25 19:32:48 801
原创 Project Euler 51 Prime digit replacements(枚举)
超级传送门:http://projecteuler.net/problem=51 这题我是暴力枚举的,O3优化后2秒多。先枚举素数,再枚举要替换的位置,我用二进制来表述,设dc为当前枚举到素数的位数,则替换方法可以从1 ~ (1 代码如下: #include #include #include using namespace std;int p
2013-01-25 19:16:00 1005
原创 Project Euler 38 Pandigital mutiples(枚举)
超级传送门:http://projecteuler.net/problem=38枚举每个排列,分别判断是否合法,最大的排列即为答案。注意从918273645开始枚举即可,因为这是题目中告诉的一组解,要找比这组解更大的才行。先枚举n的值,从2到9,再枚举要乘的那个数,记为x,枚举x的位数即可,1~4,x的位数不可能大于4,如果大于4,那么2x的位数必然也大于4,组合起来长度会大于
2013-01-17 21:29:26 514
原创 Project Euler 26 Reciprocal cycles(计算有理小数循环节长度)
超级传送门:http://projecteuler.net/problem=26算法的核心思想:在除法过程中如果某一状态的除数与被除数和前面某一状态的相等,则后续的除法计算陷入循环,循环节长度就是这两个状态的距离。例子:计算1/7的循环节长度状态1: 10/7 得1余3状态2: 30/7 得4余2状态3: 20/7 得2余6状态4: 60/7 得8余4状
2013-01-15 14:47:14 1420
原创 Project Euler 20 Factorial digit sum(大数乘法)
超级传送门:http://projecteuler.net/problem=20用了自己写的大数乘法模板,乘法模板利用了这儿介绍的加法模板,注意设定内部tmp和ans数组的大小。#include #include #include using namespace std;void add(char* des, char* src){ char tmp[
2013-01-15 14:35:22 579
原创 Project Euler 13 Large sum(大数加法)
超级传送门:http://projecteuler.net/problem=13自己写的大数加法模板,用的时候注意设定tmp数组适当的长度,避免溢出或浪费空间。#include #include using namespace std;char num[150][51] ={ "3710728753390210279879799822083759024651
2013-01-15 14:30:12 793
原创 我浅浅驻足,徒留深深缠绵
夜深人静,无意间打开了一个叫ITer的人人小站,在其主页看到这么一段文艺代码: #include void main(){ double world; unsigned letter; short stay; long memories; printf("I miss you.\n");} 于是把它翻译成了四个版本,雅俗共赏:在两个
2013-01-01 22:19:54 1241 5
原创 百度2012年校招笔试题——pszStringRotate
百度2013校园招聘笔试题 算法与程序设计 第4题: 字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。 字符串位移,再简单不过了,方法也很多. 有朴素算法(逐位移动,移动nCharsRotat
2012-11-01 23:15:18 2988
原创 HDOJ 1754 I Hate It(线段树)
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754分析:用线段树来保存学生成绩,每次更新区间最大值即可。代码:#include#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1const int maxn = 200000;char cmd[2];int
2012-08-11 23:44:58 493
原创 HDOJ 2852 KiKi's K-Number(树状数组)
超级传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2852题意:有一个容器里有m个数(1分析:用树状数组来维护这个容器,每次查找用二分。代码:#include#includeusing namespace std;const int maxn = 100010;int c[maxn];int n;in
2012-08-11 23:23:52 1529
原创 POJ 3321 Apple Tree(DFS+树状数组)
超级传送门:http://poj.org/problem?id=3321题意:有一棵苹果树,每个分叉的交点或者末端刚开始都长有苹果,这些苹果可以被吃掉,也可以再长出来,但是每个位置上同时最多只有一个苹果。现在要查询指定的某棵子树上的苹果树。分析:典型的树状数组求和问题,但是刚看题感觉很棘手,如何把一棵树映射到树状数组里?这里采用DFS改时间戳的方法,记两个数组begin和e
2012-08-11 23:09:30 450
原创 POJ 2029 Get Many Persimmon Trees(二维树状数组)
超级传送门:http://poj.org/problem?id=2029题意:一块W*H的矩形区域,每一小块可能有柿子树,让你用一个S*T的矩形选择,问最多能选中几棵柿子树。(注意S和T不能倒置,题目给你3 5和5 3是不一样的做法)。分析:典型的二维树状数组,枚举矩形起点,求和,取最大值,注意边界。代码:#include#includeusing na
2012-08-11 22:56:33 404
原创 POJ 1990 MooFest(树状数组)
超级传送门:http://poj.org/problem?id=1990题意:X轴上有N头牛(1分析:用两个树状数组,一个用来存放当前位置左侧牛的个数,另一个存放左侧牛的横坐标。利用排序可以巧妙地避开max(v[i],v[j])的计算,先按照v从小到大对牛排序然后再依次插入树状数组,不影响结果。这样的话每次计算左侧的时候,乘以的v都是当前牛的v(当前最大)。在纸上画个图就能看出
2012-08-11 22:47:50 419
原创 USACO 1.3.4 Prime Cryptarithm
暴力求解法,由于数据规模小,穷举即可,注意取位的技巧。代码如下:/*ID: michael139LANG: CPROG: crypt1*/#include#includeint vis[10];int main () { FILE *fin = fopen("crypt1.in", "r"); FILE *fout = fopen("crypt1.
2012-02-22 18:08:56 392
原创 USACO 1.3.3 Calf Flac
题意:给定一个字符串(只考虑其中的'a'~'z'或'A'~'Z'),找出其中最长的回文,输出回文长度和原始的最短的包含该回文的字符串片段。数据的输入比较恶心,为此WA了好多次。题意要求测试文件里可能有多行数据,每行不超过80个字符,总共不超过20000个字符。找回文的时候,要把多行数据看成一行,找最长的,但输出的时候原来有换行的地方在回文里还是要换行,需要注意。代码如下:/*
2012-02-22 16:41:26 652
原创 USACO 1.3.2 Barn Repair
贪心算法。先用vis数组标记此栏里是否有牛(vis[i]==1表示第i栏有牛),然后用数组gap记录从此栏开始的最大空缺(比如X表示有牛,O表示没牛:XXOOOOXOX,编号从1开始。那么在这种情况下gap[2]==4,gap[7]==1,其他位置gap值均为0)。贪心策略:统计牛一共被分成了连续的几段(设有K个位置gap不为0,则牛被分成了连续的K+1段)。然后比较能提供的最大木板数m与K+
2012-02-22 00:47:41 378
原创 USACO 1.3.1 Mixing Milk
本题利用贪心算法即可求解。贪心策略:优先取单价最低的,直到数量足够。代码如下:/*ID: michael139LANG: CPROG: milk*/#include#includetypedef struct { int p,a;} Farmer;Farmer f[5050],temp;int main () { FILE *fin = f
2012-02-21 23:15:04 358
原创 USACO 1.2.5 Dual Palindromes
此题可以利用1.2.4中所写的进制转换函数,题目本身没有太大难度,模拟即可。代码如下:/*ID: michael139LANG: CPROG: dualpal*/#include#includeint tenToB(int ten,char B[150],int b);int main () { FILE *fin = fopen("dualpal.in"
2012-02-21 22:40:41 329
原创 USACO 1.2.4 Palindromic Squares
本题的关键是进制转换,如何将10进制数转换为B进制(2代码如下:/*ID: michael139LANG: CPROG: palsquare*/#include#includeint tenToB(int ten,char B[150],int b);int main () { FILE *fin = fopen("palsquare.in", "r");
2012-02-21 21:59:36 437
原创 USACO 1.2.3 Name That Number
思路:先把dict.txt中的名字都转化成数字,存储在数组中,便于查找。需要注意的是数字与字母的对应表里没有字母Q和Z,还有就是如果有多组满足题意,则都需要输出。代码如下:/*ID: michael139LANG: CPROG: namenum*/#include#includechar table[8][4]={"ABC","DEF","GHI","JKL","MN
2012-02-21 21:52:08 433
原创 USACO 1.2.2 Transformations
本题可以看作是一道几何题,定义了几种基本操作:1.顺时针旋转90度、2.180度、3.270度、4.绕竖直对称轴翻转、5.组合变换(先进行4,再进行1~3中任意一种)、6.不做改变。题目给定变换之前的图像和变换之后的图像,求让上述一种变换来实现(注意,仅仅是一种),如果有多种,输出编号最小的,如果无解,则输出“7”。代码写出来还是比较长的,不过思路很清晰。代码如下:/*I
2012-02-21 02:00:02 458
原创 USACO 1.2.1 Milking Cows
我写的方法比较笨,用了一个时间轴数组vis,若vis[i]==1,则说明第i~i+1秒之间有牛正在被喂奶,最后统计一下数组上连续1的最大长度和连续0的最大长度就可以。代码如下:/*ID: michael139LANG: CPROG: milk2*/#include#includeint vis[1000500];int main () { FILE *fin
2012-02-20 22:00:17 379
原创 USACO 1.1.4 Broken Necklace
模拟题,遍历项链,选择断点,然后双向搜索,应该注意项链是循环的,为了避免重复搜索,用vis数组来标记搜索过的珠子。每次记录最大可以收集的珠子数,与最大值做比较。本题要注意断点为w时的处理方法,特殊地,当珠子全为w时,输出n(即项链长度)。代码如下:/*ID: michael139LANG: CPROG: beads*/#include#includeint main
2012-02-20 20:21:35 522 1
原创 USACO 1.1.3 Friday the Thirteenth
比较简单,直接模拟,需要注意闰年的判断和对不同月份日期的处理。代码如下:/*ID: michael139LANG: CPROG: friday*/#include#includeint is_leapYear(int y);int main () { FILE *fin = fopen ("friday.in", "r"); FILE *fout
2012-02-20 19:17:55 342
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人