摘要: 如果你还没有看过上一篇文章,请先移步看问题描述。扩展问题二:至多扫描一遍序列,求出丢失的两个数字。不管用什么方法,可以肯定的是我们至少需要扫描一遍序列。因为只能扫描一遍,所以先求出 a XOR b,再根据结果分类的方法就不适用了。既然我们不能根据某一位分类,那我们能否对所有位进行分类呢?比如,int是32位,我们可以对每一位都分成两类分别异或。我们还要记录每一位上1出现的次数,实际上,只需要记录1出现奇数次还是偶数次就够了。如果某一位上1出现奇数次,那么我们就知道 a 和 b 在此位上的比特不同。从而利用前面分类异或的结果就直接得出答案。Python 代码:deffind_missing_2_ 阅读全文
posted @ 2012-04-24 16:53 shilcare 阅读(1415) 评论(1) 推荐(1)
摘要: 这是一个有趣的面试题。有一个袋子,里面放有1,2,3,...,100,共100个整数,且每个数字只出现一次。现在由于袋子破了个洞,造成其中一个数字丢失了。请找出丢失的数字。很容易想到的方法是:我们可以用减法,1+2+...+100的和减去袋子中所有数的和,其差就是丢失的那个数字。1 + 2 + ... + 100可以由等差数列公式100*(1+ 100)/2 = 5050算出,我们只需要遍历一次袋子中的数字即可。把这道题推广到一般情况:设π是{1, 2, ... , n}的一个全排列,π-1是π 中丢失了一个数字后的序列。找出序列π-1中缺失的数字。当n比较小时,我们仍可以用上面的方法,但是当 阅读全文
posted @ 2012-04-24 14:56 shilcare 阅读(3210) 评论(8) 推荐(3)
摘要: 为什么要写这个小工具?昨天下午在网上闲逛,在百度贴吧看到一篇贴子,楼主通过不定时的发表回复来讲自己的故事,形象的称为“直播贴”。可是在看了十几页后,我发现由于回复的人越来越多,两段故事之间的间隔越来越大,这破坏了故事的连贯性,给看故事的人带来不便。于是就产生了写一个小工具只下载某人的发贴的想法。你是否也有过在百度贴吧“追直播”的痛苦经历?现在,你只要输入某个你想看的人的用户名和贴子的地址,就可以把这个人的贴子下载到你的电脑上,然后轻松的看直播了。‍使用说明打开命令行窗口,进入目录VSO,命令格式:vso.exe 用户名 贴子URL地址 [最大网页数]用户名—想要看的那个人的百度ID贴子URL地 阅读全文
posted @ 2011-05-28 16:10 shilcare 阅读(794) 评论(0) 推荐(0)
摘要: 由于C/C++语言本身没有数组越界检查机制,当向缓冲区里写入的数据超过了为其分配的大小时,就会发生缓冲区溢出。攻击者可以利用缓冲区溢出来窜改进程运行时栈,从而改变程序的正常流向。在分析缓冲区溢出攻击的原理之前,我们先来复习一下进程在内存中的结构。进程在内存中的组织形式 Text段主要包含程序代码(一系列可执行的指令),另外还有一些只读的数据。通常操作系统标记该段为只读段,如果有进程试图修改该段,会引发段错误。Data段包括已初始化和未初始化的全局变量,静态变量也放于此处。该段的大小是在编译时期计算的。紧接着Data段的一块内存是由堆和栈共享的区域。堆向下(高地址)增长,栈向上(低地址)增长。堆 阅读全文
posted @ 2010-12-23 01:27 shilcare 阅读(6676) 评论(0) 推荐(0)
摘要: 这个对经常在OJ上做题的童鞋们很有用。OJ基本都是用标准输入输出(USACO除外)。但如果你在调试的时候也都是从控制台输入,那就太浪费宝贵的时间了。我们可以重定向标准输入,调试的时候从文件读,提交时从标准输入读。在C语言中,方法比较简单。使用函数freopen():[代码]这样就把标准输入重定向到了data.in文件,标准输出重定向到了data.out文件。这两句代码之后,scanf函数就会从da... 阅读全文
posted @ 2010-09-02 15:17 shilcare 阅读(4685) 评论(1) 推荐(3)
摘要: 题目传送门:进入分析:这道题是“石子合并”的变形。同样是用动态规划来解。用 dp[i, j] 表示从第 i 堆开始的 j 堆混合物合并所释放的最少烟雾量sum[i, k] 表示从第 i 堆开始的 j 堆混合物合并后的颜色。显然有状态转移方程:dp[i, j] = min { dp[i, k] + dp[i + k, j - k] + sum[i, k] * sum[i + k, j - k] } (1 <= k < j)由此不难写出代码:01 #include <iostream>02 #include <cstring>03 #include <cl 阅读全文
posted @ 2010-06-26 18:55 shilcare 阅读(365) 评论(0) 推荐(0)
摘要: 数据库游标允许你选择一组数据,通过翻阅这组数据记录——通常被称为数据集,检查每一个游标所在的特定的行。你可以将游标和局部变量组合在一起对每一个记录进行检查,当游标移动到下一个记录时,来执行一些外部操作。 游标的另一个常见的用法是:保存查询结果以备以后使用。一个游标结果集是通过执行SELECT 查询来建立的。如果你的应用程序或过程需要重复使用一组记录,那么第一次建立游标以后再重复使用,将会比多次执行查询快得多。而且,你还能在查询的结果集中翻阅记录。创建游标Transcat-SQL创建游标语法如下:SYNTAX: declare cursor_name cursor for select_st 阅读全文
posted @ 2010-03-23 22:04 shilcare 阅读(314) 评论(1) 推荐(0)
摘要: 对于windows低层编程来说,进行API拦截始终是一件让人激动的事,用自己的代码来改变其它程序的行为,还有比这个更有趣吗?而且,在实现API拦截的过程中我们还有机会去熟悉许多在RAD编程环境中很少接触的东西,如DLL远程注入、内存管理,PE文件格式等知识。许多商业软件,如金山词霸等词典软件,各种即时汉化软件、甚至一些网络游戏的外挂中都用到了这种技术,各种调试工具中多多少少也要用到这种技术。实现A... 阅读全文
posted @ 2009-11-07 15:14 shilcare 阅读(575) 评论(1) 推荐(1)