自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ACM 【程式=演算法+資料結構】@蜡笔小轩V

“这么漂亮的女生追求你,你为什么把她拒了?” “妹纸再漂亮,也没有算法漂亮。走了,哥要通宵刷题去了。”

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

原创 what if 让我来安排大学本科的课程

现在都快毕业了,读了3年大学,学院的教学一直让我诟病,感觉除了坑爹,还是坑爹,特别是专业的方向--嵌入式,我都不想提了。当初刚入学,人家还问我,为什么报嵌入式方向?我那时觉得又能搞软件又能搞点硬件还不错,那时还幻想能整个机器人什么的,结果上完嵌入式,彻底摧毁你的兴趣。实验室那些都不知是什么鸟开发机,上课跟实验都乱七八糟的。    不过,既然你说它不好,你就应该提出一个更好的解决方案。那好,现在

2011-11-18 00:14:11 7686 21

原创 写给在Linux/Ubuntu门外徘徊的少年们

先放张截图勾引一下吧,左边是docky,用wine模拟器跑QQ,ubuntu10.04 64bit(因为编译chromium的源码需要4G+虚拟内存。。晕),emerald标题栏透明,精简版界面的nautilus文件管理器,下方的程序栏自动隐藏了。        哥用Ubuntu已经快2年了吧。感觉良好。    刚开始用的时候,很不习惯。但我很清楚一点,不习惯可能只是你

2011-11-13 23:03:11 3410 3

转载 【转】C++中enum枚举类型成员重名问题的解决方法 - Enum枚举类型的类封装

//C#就没有这个问题,有兴趣可以去看看,抛砖引玉一下。C++毕竟还是有些进化不完整。C++语言中,对于一个枚举类型(enum),其成员值在所属枚举类型的声明作用域内是不可重复的。这个继承自C语言的特性,使我在写程序时碰到有相同名称的枚举成员时,苦于寻找且方便易读的替代枚举名称。这在C++程序开发方面带来了许多的不方便,在涉及枚举类型时必须时刻关注与现有的枚举变量是否有重名,在一定程度

2011-10-12 16:31:57 1448

原创 博弈论的一点资料,关于NIM和SG函数

最近手贱,又整acm的东西了。。。说到博弈论,就想起了Alice和Bob。比如Sicily 1798. Alice and Bob之前做过一些题,可以构造出必胜的走法,需要技巧,遇到复杂一点的游戏规则就没辙了,所以还是得系统学一下一些博弈问题的解法。看到有人提起SG函

2011-09-22 01:30:51 7671 2

原创 代码编辑神器VIM(附我写acm程序时的配置)

有些牛X的人性格会比较古怪,VIM就是这么一位特立独行,难以琢磨的怪客。但如果熟悉了,你就会发现他的好。    VIM(VI,VIM,GVIM)这东西不好上手,而且是相当不好上手,基本上新手打开这个编辑器,想试着输入几个字符之后,便会很恼火地把VIM关掉。    第一次接

2011-08-15 23:27:59 8217

转载 C语言的5种存储类以及关键字volatile、restrict

原文地址 http://www.blogjava.net/killme2008/archive/2007/08/04/134399.html    《C Primer Plus》读到12章,我的C语言复习进展的挺不错。这一章介绍存储类、连接和内存管理,可以说是重中之重。C的5种存

2011-07-10 22:54:59 1243

原创 2503 最长字符串

TAG 水题 先找出大的count,比如A,组成A B A B .... A B A 这样,A包在外面,再把多余的A加塞进去,能塞多少是多少。注意处理 max 0 的边界情况 #include //#include //const int N=205;int countA, countB, maxA, maxB, ans;int pieceA, pieceB;

2011-06-18 01:24:00 1703 2

原创 1021. Couples

TAG 括号匹配偶然发现一道自己之前没ac的题,而且都是CE。 刚好现在弄清楚了,大数组要放到main函数外。不然会有奇怪的错误。跟编译时数据的分配位置有关。 i686-linux-4.4.........crt1.o: In function `_start:(.text+0x18): undefined reference to `maincollect2:

2011-06-16 19:32:00 1655

原创 卡特兰数一个有趣的应用模型及小结

偶然看到的题目,居然可以用卡特兰数解。12个人排两排,每排都按身高由小到大排,要求第二排相应位置上每个人的身高都比第一排上的人要高,问有多少种排法? 卡特兰数的一个模型就是括号匹配。先给括号标号(序号对应身高),我们把左括号当作第一排的人,右括号当作第二排的人。  1

2011-06-15 12:07:00 2579

原创 解决“这是位置留给子网域”问题

<br />先说明一下我遇到的情况<br />网站升级了,是基于wordpress开发的,打开了固定链接重写。打算把旧网站移到子域名 old.xxxx.xx,虚拟主机提供的后台是DirectAdmin,建立子域名倒是相当方便。子域名的DNS解析会自动帮你配好,并在public_html目录下建立相应的目录(比如这里的old)<br /> <br /> <br />好了,问题来了,把旧网站传到public_html/old目录后, 输入old.xxxx.xx并无法访问,显示一个乱码的页面,得手动把编码改为UT

2011-06-02 15:34:00 1776

原创 用位运算巧解元素出现次数问题

先举道简单的题:有一些筷子,长短不一,长度一样的能组成一双。现在刚好有一堆筷子,数量为奇数,而且刚好只有一只筷子落单,其余都成双。请找出这只落单的筷子的长度。在acm的书看到有类似的题目,是用位运算解的,挺巧妙的。有几种办法:先排序,再扫描一次。如果扫描到长度相同的连续一段个数为奇数,则输出解。例如1,1,2,2,2,3。。。 2出现的次数为3,奇数,输出2,可以停了。O(NlogN)  (用于排序)筷子长度的范围比较小的话,可以开个数组。a[i] 记录长度为i的筷子出现的次数,累加后,a[i]=a[i

2011-05-24 20:54:00 5537 4

原创 从一道题谈C++容器内元素的类型约束

《C++ primer》第四版中文267页,9.1.2元素类型必须支持赋值运算。元素类型的对象必须可以复制。不久前我复习的时候还标记了一下,没想到理解得还不深刻啊。。

2011-05-23 23:40:00 2607 3

原创 博客怎么知道你是通过搜索引擎链接进来的?

有时访问一些博客我们会在右下角看到升起一个小面板,提示“欢迎通过XX搜索来到。。。“之类的信息,我想你跟我一样,肯定也会很好奇,到底网站是怎么知道这些信息的。猜想:搜索引擎在修改博客地址,在后面加上get的参数。这样比较麻烦,通用性不好,甚至会引起错误。而且必须先约定要格式。web服务器能获取到这个请求是从那个页面发送来的?其他?。。在网上查了一下,原来http header 有referer字段。可以用firefox的firebug插件查看。有时博客上也会用clicki.cc挂件,原理一样顺便说一下,浏览

2011-05-23 03:32:00 1465

原创 可视化数据结构和算法(强烈推荐给初学者)

我以前学数据结构和算法时,有些内容感觉很难懂,自己花了很多时间琢磨,最后才搞清楚。数据结构和算法用语言描述的话,比较抽象,而且细节无法描述得太具体清楚。会让人疑问,到底具体怎么操作。用伪代码/代码描述,过程是清晰了,但是又不好懂,时常一行关键代码会让你想得焦头烂额。比较好的办法,就是举个例子,实际演示一遍,这样对整个算法有一个大概的认识后,帮助进一步理解。 但对于新手来说,按照伪代码自己动手演示,难度颇大。好在国外有好事之徒做好了演示动画,相当适合初学者学习,强烈推荐!http://www.cs.usfca

2011-05-23 01:07:00 3227 1

原创 写给web入门开发者的一些经验/建议

    我初中的时候接触过网页制作,那时候是用dreamweaver做的静态页面,一直对动态页面怀有比较大的好奇。机缘巧合下,由于要帮同乡会做做网站,走上了web开发这条不归路。(╬▔ ω▔)    由于陆陆续续有人跟我请教学习web开发的一些事情,我把我自己的一些经验、建议整理一下,分享给大家。     Asp.net(C#)/PHP    我当时学习的时候,跟师兄请教了一下,他让我去学asp.net,说这个简单好学。我自己去查了一下,aps.net使用两种语言C#和VB,由于我对VB有所偏见(觉得那是给

2011-05-09 14:07:00 1883

转载 [转] 搞ACM的你伤不起 by Roba(附某牛腾讯悲催面试)

//哎,悲催~~感同身受啊。。里面提到的很有参考意义。。。//哥后来找到原作者的博客啦 http://roba.rushcj.com/ RoBa原创,转载请注明出处劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁

2011-05-07 15:49:00 7124 15

原创 我自己常用的linux命令及使用技巧(不断完善中)

通用:一般按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。1. sudo -i可以切换到超级用户,不用每次都输密码。对应的登出命令为logout2.ls 列出目录下文件3.mkdir创建目录4.pwd列出当前工作目录linux的用户权限概念比较强,安装程序的时候有时没办法在图形界面直接把压缩包内的文件拖动解压到相应目录下,需要用以下一些命令配合5.tar解压,太常用了 tar -zxvf nmap-3.45.tgz6.mvmv

2011-05-02 13:35:00 1752

转载 [转]程序员:增加编程经验的3种途径

<br />最近,有位论坛会员陷入了一个与许多入门级程序员相同的尴尬局面中:企业们不喜欢雇佣没有经验的人,并且多数都不愿意提供培训。如果那么多的企业都不雇佣 没有经验的人,那么这些人要从哪寻得他们所需的经验呢?不幸的是,这种局面是大多数IT人士所面临的主要问题。 <br /><br /><br />通过与这位会员长期的交流与反复的讨论,就加快他的职业生涯发展,除了给他《开始编程生涯的5个建议》之外,我另外还提出了三条建议,以助他积累增加编程经验。<br /><br />1. 无偿工作(或几乎免

2011-04-25 12:19:00 1340

原创 1297. 猴子舞

TAG 动态规划原本想用数学方法解, 构造了一下, 只能解出部分答案, 显然是有问题的....不清楚这道题能不能用数学方法解, 如果能的话可能证明也会超复杂...我的经验就是, 对于这种"数学题", 一般是可以计算机的办法"暴力"解的, 暴搜或者dp吧..先理清题意, 对于题目描述的图, 如果能保证图连通, 那就是一个环了. 因为连通性不作要求,所以实际上可以分为1个或多个环. 当然, 这里每个环至少包含2个"圈".就是求把n分成若干份,使其的最大公约数最大.dp[i][j]表示i个圈, 分成j个环dp[i

2011-04-15 02:58:00 2997

转载 割点与桥

<br />TAG 图论 割点 桥<br />原帖地址:http://www.cppblog.com/Icyflame/archive/2009/07/05/89227.html<br />/*<br />我的理解:刚开始思考怎么算割点,我的思路是如果去掉该点,再从该节点的任意一个邻接节点出发,如果不能遍历其他全部节点,那该点就是割点。显然很蛋疼,每个点都要去dfs一次。这里面有很多冗余运算。<br />举一个例子,一条链,0-1-2-3-...-n  这样,从0开始,每次遍历都是相似的,后面的被遍历很多遍

2011-04-04 03:53:00 2197

转载 [转]给想当程序员的大二学生的建议

<br /> 本文是从 Advice to a college sophomore programmer 这篇文章翻译而来。 <br />  背景:最近我在Groupon公司的一项新职务是为公司招募优秀的开发人员。我是Groupon开发团队的代言人,负责发布招聘信息、回答问题等。过去的一周,我对两个询问夏季实习工作的学生进行了回复。<br />  下面是我在回复他们的邮件中的感觉值得公开发表的一些建议:如果你在大二的时候就已经开始接触外面的公司,我认为你做的很对,你就应该这么早为你今后的职业生

2011-03-26 01:11:00 1401 2

转载 [转]开发工程师人生之路

<br />相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心。在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人。第二句最常说的话是对公司的领导:“不行我就走人!”,实际上你也真的走过几回。对了,在这几年中,因为你的经济条件不错,你开始买房、开始谈恋爱、结婚、开始

2011-03-26 01:03:00 1415 3

原创 Ubuntu10.10 安装XAMPP并配置Eclipse,xDebug

安装xampp到xampp官网下载 xampp-linux-1.7.3a.tar.gz安装到推荐目录(要跟后面的配置对应) sudo tar xvfz xampp-linux-1.7.3a.tar.gz -C /opt        启动xampp sudo /opt/lampp/lampp start tips安装时注意以管理员身份(sudo)在 /opt/lampp/share/xampp-control-panel 有用python写的图形界面xampp控制面板, 一样注意得用sudo 运行,可以在桌

2011-01-24 06:20:00 2342 1

原创 1114 Food Cubes

<br />TAG 种子染色  Flood Fill<br />忙于课程的各种projects,好久没写acm,惭愧,写个简单的种子染色都搞得焦头烂额。哎。<br />3维的跟2维的处理起来没多大区别。<br />不过直接深度优先居然stack overflow。才 10^6啊!?<br />所以先求出坐标的取值范围,然后扩大1个单位。最后答案要减1,也就是包围food的那个空间。<br />#include <stdio.h>#include <memory.h>const int N=102;

2010-12-02 22:27:00 1869

原创 1172. Queens, Knights and Pawns

<br />TAG 水题 模拟<br /> <br />按题意模拟就行。不过注意能阻挡queue的是已有的棋子,而不是会被攻击的格子。用bool数组不够表示所有状态。我用char。<br />board[i][j]= {<br />                     0,   (空格,安全)<br />                     1, (会被攻击)<br />                     2, (已有题目给的棋子)<br />                   }<br /

2010-10-10 17:31:00 2141

原创 1033. City Road

<br />TAG 动态规划<br /> <br />有M*N间房子,有(M+1)*(N+1)个路口,题目求的就是从路口(0,0) 到 路口(M+1, N+1) 有多少最短路。所谓最短路,就是只能向右或者向上走。<br />设f[i][j]为到点 (i,j)的最短路径数,有 f[i][j] = f[i-1][j] + f[i][j-1] ,注意边界。<br /> <br /><br />而题目增加了big buildings后,big buildings内部的的节点是无法到达的,所以要特殊处理,如上图的

2010-10-03 00:24:00 1374

原创 1323. Switch text

TAG 水题很水的题,不过题目没看仔细,还wa了好多次。。。(╬▔ ω▔)杯具。。“If an empty or blank line is found”我是搞不清empty跟blank。。。反正就是如果读入的是一行空格,也要忽略掉。。/* source code of submission 443988, Zhongshan University Online Judge System */#include #include char str[1024];char str2[1024];

2010-09-19 22:18:00 1455

原创 1763. 传球游戏

<br />TAG 动态规划<br /> <br />设f[i][j] 为传 i 次,传到同学 j 有多少种方法。(小蛮编号为0)。<br />f[i][j] = f[i-1][ (j+1)%n ]+ f[i-1][ (j+n-1)%n ] ,即由相邻的同学再传一次,便能到达 j 手中。<br /> <br />#include <stdio.h>#include <memory.h>int dp[31][30];int n,m;int main(int argc, char *argv[]

2010-09-18 22:01:00 1680 2

原创 1166. Computer Transformat

<br />TAG 高精度<br /> <br />题目要求 00 的个数,其实也就是 1001 的个数。 01 才能产生 1001 , 而要产生 01,可以由 00(1001)或 1 产生,注意000能产生101010,其中有2个01,但是根据题目的转换规则,是不可能出现连续2个0以上的,所以这里不用考虑。1的个数容易求,为2^(n-1)。<br /> <br />00 (1001)  ----> 01   -----> 00 (1001)<br />1<br /> <br />设f(n)为题目所求00个

2010-09-18 16:03:00 1261

原创 1282. Computer Game

<br />TAG kmp<br /> <br />算是标准的kmp的题吧,不过注意 protection_dimension 的大小并没有给出,最好动态分配内存。预先开的数组如果太小会 Restrict Function。<br /> <br />我是用大数组过的。<br />/* source code of submission 443157, Zhongshan University Online Judge System */#include <stdio.h>const int N=60

2010-09-18 13:47:00 1457

原创 1321. Robot

<br />TAG 最短路 <br /> <br />把格按上下左右的连通性转换成图,即格子为顶点,边 (a,b) 的权值为格子b的花费。再用普通的 Dijkstra 算法就可以直接解。<br /> <br />不过这里顶点最多n=10000个,普通的 Dijkstra 算法是O(n^2) 效率太低了。可以用堆优化。<br />因为在 Dijkstra 处理时候,有3种节点已检查的节点。(升序)候选节点。未处理节点。<br />我们每次需要从2中选出路径最短的节点进行检查,然后更新2和3中的路径值,把部分3

2010-09-18 02:39:00 1532 1

原创 1121. Tri Tiling

<br />显然 n 为奇数时,无法拼成。<br /><br />2*3 有3种排法,设f[n]为方案数,显然可以从前一个状态得到 f[n-2]*3 个排列。<br />通过观察,比较麻烦的是除了从 f[n-2] 能排出 f[n],另外一种情况是 f[n-2]再加上2格突出(如上图)。此时有2种排法能拼出 f[n](因为这两格突出可以上下翻转,共两种情况)。<br /> <br />所以我定义了两个数组,re 和unre,分别代表规则的3*n矩形的排列数和不规则(多出2格)矩形的排列数(后者不考虑上下翻转的

2010-08-29 10:46:00 2186 1

原创 1048 Inverso

<br />TAG 宽度优先搜索<br /> <br />明确几点:<br />1.每个操作最多出现一次。因为重复操作会抵消。<br />2.操作的次序对最后结果没有影响。<br />3.从初始状态变换到全白,跟从全白变换到初始状态的操作步骤是一致的。<br /> <br />所以<br />1.不必每次都搜索一次,预处理一次后,后面可以直接输出结果。<br />2.使操作步骤序号递增,且每个序号最多输出一次。<br />3.使用宽度优先搜索可以保证最后操作次数最少。<br /> <br />输入全白时要输

2010-08-28 17:10:00 1955

原创 1206. Stacking Cylinders & 1012. Stacking Cylinders

<br />TAG 简单几何计算<br /> <br />这两道题题目是一样的,不过输出格式有点不同,而且1206的Sample input故意设下陷阱:让人误以为输入数据有序。<br />我之前没有排序,wa了。(╬▔ ω▔)<br /> <br />圆形的位置不好处理,我们可以考虑圆心,变成三角形来分析。<br />题目说明只有相邻层会接触。所以问题变得比较简单,而且我们可以逐层计算上去,最终得到答案。<br /><br />连接相邻的2个圆心和对应上方的圆心,显然AC=AB=2,再算 θ1 和 θ2

2010-08-28 10:04:00 2619

原创 一般筛法求素数+快速线性筛法求素数

TAG 素数  数论素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功。基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 。。N^(0.5) ,看看能否整除N。如果需要判断的次数较多,则先用下面介绍的办法预处理。 一般的线性筛法首先先介绍一般的线性筛法求素数void make_prime() { memset

2010-08-22 01:28:00 50543 10

原创 1231 The Embarrassed Cryptography

<br />TAG  高精度<br />以前的经验,转换成int数组时用比较大的进制程序会比较快。比如1000进制的话,123456789转换成{123,456,789}的一个数组。<br />刚开始用了100000进制,没考虑到模除的结果比较大,用int结果会溢出的(╬▔ ω▔) wa了好多次,还查不出有什么问题。。。<br />google一下,看了某题解“不过大牛们说,百进制TLE,千进制AC,万进制WA”才恍然大悟。<br />杯具。。(╬▔ ω▔)<br />1.13s,有点慢。。。<br />/

2010-07-28 01:13:00 2008

原创 1091. Maximum Sum

<br />TAG 动态规划<br /> <br />设maxd[n]为前n个数的最大子序列和<br />maxd[n]=max{ maxd[n-1], sum[n]-minX } 其中,minX=min{sum[i] |   1<=i<n}<br /> <br />同理,设rmaxd[n]为从n到序列完的最大子序列和<br /> <br />则答案为max{ maxd[i]+rmaxd[i+1] },时间复杂度为O(n)<br />#include <stdio.h>const int N=50000

2010-07-27 17:06:00 1739

原创 1011. Lenny's Lucky Lotto

<br />TAG 动态规划<br /> <br />1.设dp[k][n]为长度为k,最大的数不超过n的序列数,也就是题目所求。<br />dp[k][n]=dp[k][n-1]+dp[k-1][n/2];<br />0 sec    416 KB<br />当n = 9, m = 2000, # lists = 19217904335640,所以得用long long,输出时用%lld<br /> <br />2.如果你设dp[k][n]为长度为k,最大数刚好为n的序列数,那你最后还得累加才能得到答案,

2010-07-26 22:51:00 1820

原创 1176. Two Ends

TAG 动态规划我原先还以为可以推出选排策略,结果不行。。没有规律,得用dp(‖▔ ω▔)题目有点问题,玩家2选大的牌,如果这时候两段的牌一样大怎么办? 得选左边的才能ac 题目最后说 If there is a tie, remove the left end.打平要去掉左端点的牌,牌就变奇数了? 不用处理才能ac,比如4 2 2 2 2 ,输出0。因为题意wa了几次,太无语了。。状态转移方程写起来有点乱,用语言描述算了。设dp[s][t] 从s到t玩家1最多的得分(玩家2按贪心策略)。dp[s][t]=

2010-07-26 16:48:00 1863 1

原创 1087. A Funny Game

<br />TAG  博弈<br /> <br />推了半天,越推越麻烦。决定再算出一些结果,从结果本身推。<br />1 Alice<br />2 Alice<br />3 Bob<br />4 Bob<br />5 Bob<br />6 Bob<br />7 Bob<br />…………<br />不对劲,都是Bob。。大胆提交大于2时Bob赢,AC了。。。<br />似乎出现Alice和Bob计算结果都很简单啊。。。<br /> <br />在某大牛的指点下,终于想出必胜取法。Alice取后,Bob可以

2010-07-25 00:23:00 1597

空空如也

空空如也

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

TA关注的人

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