posts - 101,  comments - 57,  trackbacks - 0
      最近开始写trie树,trie树还可以和并查集一起运用。

       poj 3283是一道典型的trie树问题,为了节约malloc的时间,我静态生成需要申请的内存,然后自己管理。由于预估poj的数据比较弱,所以这个方法可行。

      为了测试需要开辟空间的大小,我无耻的用小号不断的刷,终于确定了大小。

      用大号提交上去之后,饶有兴致的看了一下排名。悲剧的发现,居然是第二名 63ms,而第一名是我无耻的小号littlenumber 47ms。我擦....
posted @ 2010-09-22 22:39 margin 阅读(107) | 评论 (0)编辑 收藏
        今天做了一个奇怪梦,像看了部电影一般。醒来后居然都记得。故事有点科幻,有几个主人公,记录一下。


---------------------------------
 
        在现代化的大城市中心街区中,走来一伙人。有的西装革履,有的嘻哈打扮,他们的眼神很奇怪。为首的是一个穿白大褂的学者,他高而瘦,带着眼睛,眼里射出冰冷的目光。这伙人最终在一个立交桥下停了下来,他们好像在鞭打什么。

        一旁走来了三男三女,很好奇的,凑上一看。好像其中有三个人在欺负桥下的乞丐。他们拳打脚踢,甚至鞭笞那个乞丐。终于其中一名男子再也忍受不住大喝到“住手”,此人老实敦厚,但看上去正义凌然,应该是一名退伍军人。其他两个男人也迈步向前。
 
        教授示意了一下三人停手,然后头朝来人一拱,示意让三个手下解决掉多余之人。三人齐上,同正义方三人一起打起来。正义一方中另两为一个衣着时尚,英俊帅气,貌似应该在一些声色场所做DJ之类;另一人呆头呆闹,但穿着保安的衣服。三个女人中有一个人是保安的妻子,看上去结婚多年。另一人衣着时尚,面容姣好应该是个小白领;最后一个人简简单单,普普通通,但是眼中透着股灵气,其实是个记者。

        保安的妻子担心丈夫,竟直接向教授进攻去了。很奇怪的战斗,那伙匪徒每个人都好像在被动挨打,没有有效的反抗。教授被女人扇了几个耳光后,嘴角有丝血迹,但是似乎冷笑了一下。

         大战的结局,这伙匪徒居然被几个人打炮了,而那个乞丐也不见了。莫名奇妙,白领在一旁看着DJ很有爱慕之意想要上去搭讪几句,被冷冰冰的回绝;女记者心中充满疑问,询问了几个人联系方式后,向那伙人逃走的方向走去。。。

 [从这里开始故事开始分支]
          
          女记者的故事

          女记者跟踪那伙人,居然发现这伙人不是这个世界上的人,或者说他们是另外一个空间的人。有的人是去世后可以到这里获得新生,有些人却来这里协助他们在做一些工作。女记者潜入后,发现这个团伙其实在做一些有意义的事情。在她了解到了真想之后,她主动的来到他们的世界。


          保安的故事

          保安是个愤青,他为自己家庭的生活压力大而烦恼。但是却恨自己头脑简单而挣不了更多钱,妻子也在外面拼命的打工。女记者来到保安家里,暗示可以去某个地方看看增加自己的竞争力。保安来到后发现是一个教室,教室中有些书籍。(具体的略过)他居然发现讲课的人就是白衣教授。教授用那天他对待别人的方式对待保安自己,仿佛在暗示轮回和因果的关系。保安激动的想获得了真理,并开始在为这个组织做事。后来有拉了他老婆入伙。他老婆入伙的方式也和那天情景相识。

           女白领和DJ的故事

           (具体的不记得了)DJ是一个有自闭症的人,不知与别人相处。女白领发现他周围很多女性,但DJ似乎都没有什么兴趣。DJ死于一次意外后,来到了教授的旗下。女白领在得知消息后,非常沮丧。但居然有一天在街上再次看到DJ的背影后,开始怀疑。(之后略)

           退伍军人的故事

           退伍军人是一个强迫症患者,他与他的妻子虽然在一起但是没有任何的感情,他的妻子不了解他。最后在若干年后他才来到教授的世界中,他终于找到了解开心结的方法。


            大结局

            保安夫妻很幸福,女记者帮助退伍军人重新认识自己,退伍军人看到自己的妻子也找到另外一半;女白领付出了很多,DJ终于慢慢的开窍。



--------------------

有很多细节忘记了,但是总之故事很离奇,也很完整。我惊叹有这样的梦,怀疑自己是不是被inception了。




posted @ 2010-09-19 09:20 margin 阅读(135) | 评论 (2)编辑 收藏
初期:
一.基本算法: 
     (1)枚举. (poj1753,poj2965)
     (2)贪心(poj1328,poj2109,poj2586)
     (3)递归和分治法. 
     (4)递推. 
     (5)构造法.(poj3295)
     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.图算法: 
     (1)图的深度优先遍历和广度优先遍历. 
     (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) 
        (poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
     (3)最小生成树算法(prim,kruskal)
        (poj1789,poj2485,poj1258,poj3026)
     (4)拓扑排序 (poj1094)
     (5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020)
     (6)最大流的增广路算法(KM算法). (poj1459,poj3436)
三.数据结构. 
     (1)串 (poj1035,poj3080,poj1936)
     (2)排序(快排、归并排(与逆序数有关)、堆排) (poj2388,poj2299)
     (3)简单并查集的应用. 
     (4)哈希表和二分查找等高效查找法(数的Hash,串的Hash)   
        (poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
     (5)哈夫曼树(poj3253)
     (6)堆 
     (7)trie树(静态建树、动态建树) (poj2513)
四.简单搜索 
     (1)深度优先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
     (2)广度优先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
     (3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.动态规划 
     (1)背包问题. (poj1837,poj1276)
     (2)型如下表的简单DP(可参考lrj的书 page149): 
       1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
       2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最长公共子序列)
   
         (poj3176,poj1080,poj1159)
       3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最优二分检索树问题) 
六.数学 
     (1)组合数学: 
        1.加法原理和乘法原理. 
        2.排列组合. 
        3.递推关系. 
          (POJ3252,poj1850,poj1019,poj1942)
     (2)数论. 
        1.素数与整除问题 
        2.进制位. 
        3.同余模运算.
          (poj2635, poj3292,poj1845,poj2115)
     (3)计算方法. 
        1.二分法求解单调函数相关知识.(poj3273,poj3258,poj1905,poj3122)
七.计算几何学. 
     (1)几何公式.
     (2)叉积和点积的运用(如线段相交的判定,点到线段的距离等). (poj2031,poj1039)
 
     (3)多边型的简单算法(求面积)和相关判定(点在多边型内,多边型是否相交) 
         (poj1408,poj1584)
     (4)凸包.  (poj2187,poj1113)

 


中级:
一.基本算法: 
     (1)C++的标准模版库的应用. (poj3096,poj3007)
     (2)较为复杂的模拟题的训练(poj3393,poj1472,poj3371,poj1027,poj2706)
二.图算法: 
     (1)差分约束系统的建立和求解. (poj1201,poj2983)
     (2)最小费用最大流(poj2516,poj2195)
     (3)双连通分量(poj2942)
     (4)强连通分支及其缩点.(poj2186)
     (5)图的割边和割点(poj3352)
     (6)最小割模型、网络流规约(poj3308, )
三.数据结构. 
     (1)线段树. (poj2528,poj2828,poj2777,poj2886,poj2750)
     (2)静态二叉检索树. (poj2482,poj2352)
     (3)树状树组(poj1195,poj3321)
     (4)RMQ. (poj3264,poj3368)
     (5)并查集的高级应用. (poj1703,2492)
     (6)KMP算法. (poj1961,poj2406)
四.搜索 
     (1)最优化剪枝和可行性剪枝 
     (2)搜索的技巧和优化 (poj3411,poj1724)
     (3)记忆化搜索(poj3373,poj1691)
     
五.动态规划 
     (1)较为复杂的动态规划(如动态规划解特别的施行商问题等)
         (poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
     (2)记录状态的动态规划. (POJ3254,poj2411,poj1185)
     (3)树型动态规划(poj2057,poj1947,poj2486,poj3140)
六.数学 
     (1)组合数学: 
        1.容斥原理. 
        2.抽屉原理. 
        3.置换群与Polya定理(poj1286,poj2409,poj3270,poj1026). 
        4.递推关系和母函数. 
        
     (2)数学. 
        1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
        2.概率问题. (poj3071,poj3440)
        3.GCD、扩展的欧几里德(中国剩余定理) (poj3101) 
     (3)计算方法. 
        1.0/1分数规划. (poj2976)
        2.三分法求解单峰(单谷)的极值. 
        3.矩阵法(poj3150,poj3422,poj3070)
        4.迭代逼近(poj3301)
     (4)随机化算法(poj3318,poj2454)
     (5)杂题.
         (poj1870,poj3296,poj3286,poj1095)
七.计算几何学. 
        (1)坐标离散化. 
        (2)扫描线算法(例如求矩形的面积和周长并,常和线段树或堆一起使用). 
            (poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
        (3)多边形的内核(半平面交)(poj3130,poj3335)
        (4)几何工具的综合应用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429
)

 


高级:
一.基本算法要求:  
      (1)代码快速写成,精简但不失风格  
          (poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
      (2)保证正确性和高效性.  poj3434
二.图算法: 
      (1)度限制最小生成树和第K最短路. (poj1639)
      (2)最短路,最小生成树,二分图,最大流问题的相关理论(主要是模型建立和求解)

         (poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
      (3)最优比率生成树.  (poj2728)
      (4)最小树形图(poj3164)
      (5)次小生成树. 
      (6)无向图、有向图的最小环   
三.数据结构.  
      (1)trie图的建立和应用. (poj2778)
      (2)LCA和RMQ问题(LCA(最近公共祖先问题) 有离线算法(并查集+dfs) 和 在线算法
 
          (RMQ+dfs)).(poj1330)
      (3)双端队列和它的应用(维护一个单调的队列,常常在动态规划中起到优化状态转移

          目的).  (poj2823)
      (4)左偏树(可合并堆).  
      (5)后缀树(非常有用的数据结构,也是赛区考题的热点). 
         (poj3415,poj3294)
四.搜索  
      (1)较麻烦的搜索题目训练(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
 
      (2)广搜的状态优化:利用M进制数存储状态、转化为串用hash表判重、按位压缩存储
状态、双向广搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
      (3)深搜的优化:尽量用位运算、一定要加剪枝、函数参数尽可能少、层数不易过大
、可以考虑双向搜索或者是轮换搜索、IDA*算法. (poj3131,poj2870,poj2286)
五.动态规划  
      (1)需要用数据结构优化的动态规划.
         (poj2754,poj3378,poj3017)
      (2)四边形不等式理论. 
      (3)较难的状态DP(poj3133)
六.数学  
      (1)组合数学. 
        1.MoBius反演(poj2888,poj2154)
        2.偏序关系理论. 
      (2)博奕论. 
        1.极大极小过程(poj3317,poj1085)
        2.Nim问题. 
七.计算几何学.  
      (1)半平面求交(poj3384,poj2540)
      (2)可视图的建立(poj2966)
      (3)点集最小圆覆盖. 
      (4)对踵点(poj2079)
      八.综合题.
      (poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263
)

posted @ 2010-09-01 17:09 margin 阅读(162) | 评论 (1)编辑 收藏
       这是一题相当有水平的并查集问题。虽然我一次性ac,但是基本上是没有任何思路搜索了一下牛人思路才过的。

       思考这题时,我陷入到了以下怪圈:
1.并查集应该是无限的,但是貌似这题的并集只有三个
2.当两者关系未被确认是哪个集合时,会出现无限多的临时子集
3.如何表示临时子集
  
       看了看牛人的思路,相当巧妙:并查集基本还是无限集,有限集用关系向量来表示。
1.使用关系向量的方法,让我获益匪浅。
2.计算关系向量的方法,又如此的巧合。
3.并查集并不一定是相同的才并一起,又回归到第一点,当关系向量可以用有限集表示时,并查集里的元素可以不是同一类元素。

最后还要说,这题相当牛B.
#include "stdio.h"

#define MAX 50001

#define Similar 0   
#define Enemy   1
#define Food    2
//  Food eat Enemy
//  Enemy eat Similar
//  Similar eat Food

struct _xtree
{
    
int parent;
    
int relation;
}
xtree[MAX];

int N, K;

void build()
{
    
int i;
    
for (i = 1; i <= N; i++)
    
{
        xtree[i].parent   
= i;
        xtree[i].relation 
= Similar;
    }

}


int find(int i)
{
    
int p = xtree[i].parent;
    
if (p != i)
    
{
        xtree[i].parent   
= find(xtree[i].parent);
        xtree[i].relation 
= (xtree[p].relation + xtree[i].relation) % 3;
    }


    
return xtree[i].parent;
}


int check(int x, int y, int r)
{
    
int root_x, root_y, root_r;

    
if (x > N || y > N)
    
{
        
return 0;
    }


    root_x 
= find(x);
    root_y 
= find(y);
    
    
if (root_x == root_y)  // x relate y
    {        
        
return (xtree[x].relation - xtree[y].relation + 3% 3  == r ? 1 : 0;          
    }

    
else
    
{
        root_r 
=  (xtree[y].relation + r + (3 - xtree[x].relation)) % 3;
        xtree[root_x].parent   
= root_y;
        xtree[root_x].relation 
= root_r;
        
return 1;
    }

}


void main()
{
    
int op, x, y;
    
int count = 0;

    scanf(
"%d %d"&N, &K);

    build();

    
while (K--)
    
{
        scanf(
"%d %d %d"&op, &x, &y);
       
        
if (!check(x, y, op == 1 ? Similar : Enemy))
        
{
            count
++;
        }
            
    }

    printf(
"%d\n", count);
}


posted @ 2010-08-28 21:11 margin 阅读(156) | 评论 (0)编辑 收藏
     tle和wa 到麻木.... 又一题并查集。这周做题时间少了很多,原因工作太忙,准备晋升。希望晋升成功!
posted @ 2010-08-28 00:18 margin 阅读(100) | 评论 (0)编辑 收藏
   上周ac了3道 基本的线段树。这周开始做并查集,庆祝一下poj达到40题,虽然都是水题居多。
posted @ 2010-08-22 23:49 margin 阅读(73) | 评论 (0)编辑 收藏
       连续两天AC了两道线段树经典题目。

       3277用了157ms居然排到了第三,哈哈哈哈....
posted @ 2010-08-18 00:45 margin 阅读(63) | 评论 (0)编辑 收藏
     摘要: 线段树经典解决问题poj1151,计算图形覆盖总面积。1.用了半小时写了一个简单算法,看了看测试数据没过,原来理解题意错误。(如果提交就是WA)2.然后又用了朴素的枚举,这次是TLE,看来是水平不行,要学习学习别人的思路了。3.看完别人代码后,花了半天用自己的思路写了一遍,RTE。4.原来是数组设小了,再次提交PE。4.最后居然是要输出两个换行,晕倒!AC线段树的应用还有很多,就此题来说基本的思维...  阅读全文
posted @ 2010-08-15 23:38 margin 阅读(250) | 评论 (0)编辑 收藏
        Bridge模式看过很多遍,说实话没看懂过。今天终于觉悟....

        Bridge模式的定义是:将抽象和实现解耦。

        这个定义是最让人费解的,抽象和实现解耦和Bridge有什么关系,特别是UML的图形给出来的时候更让我感觉到这个定义的匪夷所思。

        下面来举个例子吧:

        我很久前遇到的问题就是:写一个系统,当输入可能内存、文件.....而输出可能是内存、文件等等的时候。如果按照C接口的定义方式,你可能要做一下的定义。
         MemToMem()
         MemToFile()
         FileToMem()
         FileToFile()
         
         一下就要定义2x2的接口,而如果在增加一个输入,那么就是2x3的接口,再增加同样的输出就是3x3的接口。

        如果在C++里面,就是有双重的集成关系,首先是基类,然后是n中输入类,再来就是n^2个输出类。

        所以Bridge模式要解决的就是这种变化关系。

        Bridge模式的思想就是将n个输入类和n个输出类解耦(抽象和实现接口)让他们分别依赖自己的基类,而最终通过组合的方式让两者分离。

        简单的代码
   
 
class Input
{
public:
    
virtual void Do() = 0;
    
private:
    OutPut pObj;
}


class InMem : public Input
{
public:
    
virtual void Do()
    
{
       pObj
->Out();
    }

}



class OutPut
{
    
virtual void Out() = 0;
}



class outMem
{
    
virtual void Out()
    
{
         
// do something
    }

}

ps.此文档之作为技术的随笔,供以后搜索,如果疑问概不回答。
posted @ 2010-07-31 18:26 margin 阅读(772) | 评论 (0)编辑 收藏
    昨天,玩推箱子游戏玩到第四关实在过不去了,用C++写了一个BFS+DP的算法求解。结果是170步。

     其实我一开始是想用python来写的,但是觉得二位矩阵这个东西很难用python来描述,于是作罢。写完后看看自己的代码,觉得恶心的不行。于是在网上搜索了一下,发现大牛居然可以把python写得如此之简洁,又一次拜服了!

用python求解迷宫问题
http://v.youku.com/v_show/id_XMTcwMzc5MTAw.html

下面是我按照视频里面敲的python代码,我的实在垃圾就不拿出来了。

这段代码最然我感到惊叹的是他对迷宫模型的表示方式,二位矩阵就如此轻描淡写的表示出来!

ps,网页代码的对齐有点问题。
 1ASCII_MAZE = '''
 2+----------------+
 3|      |     |   |
 4| | +--+ ----+ | |
 5| | |          | |
 6| |    +---- | | |
 7|   |  |     | | E
 8+---+  |  |  | | |
 9S      |  |  |   |
10+------+--+--+---+
11'''
12PATH,START,EXIT,VISITED, SOLUTION = " SE.o"
13
14class Maze():
15    def __init__(self, ascii_maze):
16    self.maze = [list(row) for row in ascii_maze.splitlines()]
17    self.start_x = [row.count(START) for row in self.maze].index(1)
18    self.start_y = self.maze[self.start_x].index(START)
19
20    def __repr__(self):
21    return "\n".join("".join(row) for row in self.maze)
22
23    def solve(self, x = None, y = None):
24    if x == None:
25        x = self.start_x
26        y = self.start_y
27
28    if self.maze[x][y] in (PATH, START):
29        self.maze[x][y] = VISITED
30        if self.solve(x + 1, y) or self.solve(x - 1, y)\
31           or self.solve(x, y +1or self.solve(x, y -1):
32        self.maze[x][y] = SOLUTION
33        return True
34    elif self.maze[x][y] == EXIT:
35        return True
36    return False
37        
38
39if __name__ == "__main__":
40    import sys
41    sys.setrecursionlimit(10000)
42    m = Maze(ASCII_MAZE)
43    if m.solve():
44    print m
45
46
posted @ 2010-07-18 17:20 margin 阅读(1511) | 评论 (0)编辑 收藏
仅列出标题
共10页: 1 2 3 4 5 6 7 8 9 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿

随笔档案

文章分类

文章档案

收藏夹

常去的坛子

  • CVC电脑病毒论坛
  • 很多人说我是AV,我告诉他们:别瞧不起人,我们也能创造价值
  • 安全焦点
  • 黑客聚集的地方,一般是好酒最多的地方...
  • 看雪论坛
  • 国内最强的加密解密论坛,成醉其中经常夜不归宿
  • 驱动开发论坛
  • 厌倦了啤的朋友们,来我们来整点白的...痛痛快快的BSOD也好过隔鞋瘙痒!

我的朋友

  • Sen的blog
  • IDE方面资深的受害者...经常为一个变量的定义找不着北的痛苦程序员(深表同情)
  • 老罗的blog
  • 良师益友,千年水牛,引擎猛男,分析怪兽,墨镜酷哥,台球高手....

搜索

  •  

最新评论