prince_nice

导航

2011年10月10日

考前狂背的经典算法

摘要: 一、数论算法 1.求两数的最大公约数function gcd(a,b:integer):integer;begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b);end ;2.求两数的最小公倍数function lcm(a,b:integer):integer;begin if a lcm:=a; while lcm mod b>0 do inc(lc... 阅读全文

posted @ 2011-10-10 20:57 prince_nice 阅读(185) 评论(0) 推荐(0)

2011年10月9日

位运算简介及实用技巧(四):实战篇

摘要: 下面分享的是我(Matrix67)自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕不提供C语言了。代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和状态压缩DP方面的题目。其实大家可以在网上找到更多用位运算优化的题目,这里整理出一些自己写的代码,只是为了原创系列文章的完整性。这一系列文章到这里就结束了,希望大家能有所收获。 (Matrix... 阅读全文

posted @ 2011-10-09 23:56 prince_nice 阅读(215) 评论(0) 推荐(0)

位运算简介及实用技巧(三):进阶篇(2)

摘要: n皇后问题位运算版 n皇后问题是啥我就不说了吧,学编程的肯定都见过。下面的十多行代码是n皇后问题的一个高效位运算程序,看到过的人都夸它牛。初始时,upperlim:=(1 shl n)-1。主程序调用test(0,0,0)后sum的值就是n皇后总的解数。拿这个去交USACO,0.3s,暴爽。procedure test(row,ld,rd:longint);var pos,p:longint;... 阅读全文

posted @ 2011-10-09 23:54 prince_nice 阅读(104) 评论(0) 推荐(0)

位运算简介及实用技巧(二):进阶篇(1)

摘要: ===== 真正强的东西来了! =====二进制中的1有奇数个还是偶数个 我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1。例如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1。var i,x,c:longint;begin readln(x); ... 阅读全文

posted @ 2011-10-09 23:51 prince_nice 阅读(281) 评论(0) 推荐(0)

位运算简介及实用技巧(一):基础篇

摘要: 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110AND 10... 阅读全文

posted @ 2011-10-09 23:23 prince_nice 阅读(192) 评论(0) 推荐(0)

区间第K大值与RMQ问题

摘要: 这次我们讨论一下有关区间中的值的问题。如果你只想看RMQ,请跳过下面这几段,在第一段代码的后面有详细的讲解。 在竞赛中,我们经常遇到最值问题。但是出题者往往给我们出一些这样的题目,让我们找到第K优解,而不是最优,比如K小生成树、K优背包等等。这篇文章主要介绍另一个“K问题“,区间第K大值。 区间第K大值的题意很明确,对于一个区间,找到其中第K大的一个数输出。这个问题可以用O(n2)的算... 阅读全文

posted @ 2011-10-09 20:51 prince_nice 阅读(258) 评论(0) 推荐(0)