随笔分类 -  ACM学习

约瑟夫环:递归
摘要:假设下标从0开始,0,1,2 .. m-1共m个人,从1开始报数,报到k则此人从环出退出,问最后剩下的一个人的编号是多少?现在假设m=100 1 2 3 4 5 6 7 8 9 k=3第一个人出列后的序列为:0 1 3 4 5 6 7 8 9即:3 4 5 6 7 8 9 0 1(*)我们把该式转... 阅读全文

posted @ 2014-05-08 21:43 KimKyeYu 阅读(240) 评论(0) 推荐(0)

凸包模板 水平序的Graham-Scan
摘要:该算法的功能是:对n个无序的点p[]求凸包,结果在s[0~top-1]内。作为O(nlgn)的算法,已然到达其下界,实现也不复杂。分析详见黑书。模板题:http://poj.org/problem?id=1113 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 #define MAXN 100517 #defin 阅读全文

posted @ 2014-02-11 18:19 KimKyeYu 阅读(805) 评论(0) 推荐(0)

数位dp 模版
摘要:1 int dfs(int i, int s, bool e) {2 if (i == -1) return s == target_s;3 if (!e && ~dp[i][s]) return dp[i][s];4 int res = 0;5 int u = e ? num[i] : 9;6 for (int d = first ? 1 : 0; d <= u; ++d)7 res += dfs(i-1, new_s(s, d), e&&d == u);8 return e ? res : dp[i][s] = res;9 }Vi... 阅读全文

posted @ 2013-11-07 20:04 KimKyeYu 阅读(367) 评论(0) 推荐(0)

【转】后缀树 解析
摘要:写这篇文章,主要是因为最近有个课题设计,里面用的字符串匹配。学习后缀树之前,先了解一下Trie这个数据结构Trie是一种搜索树,可用于存储并查找字符串。Trie每一条边都对应一个字符。在Trie中查找字符串S时,只要按顺序枚举S的各个字符,从Trie的根节点开始选择相应的边走,如果枚举完的同时恰好走到Trie树的叶子节点,说明S存在于Trie中。如果未到达叶子节点,或者枚举中未发现相应的边,则S没有被包含在Trie中。后缀树就是一种压缩后的Trie树。比如 S:banana,对S建立后缀树。首先给出S的后缀们0:banana1:anana2:nana3:ana4:na5:a6:空为了更清楚的表 阅读全文

posted @ 2013-09-09 21:11 KimKyeYu 阅读(494) 评论(0) 推荐(0)

最小费用最大流——maxflow+SPFA
摘要:最小费用最大流: 即在所有最大流中,要求得到最少费用。(每条边有两个参数:容量cap, 费用cost)。 解法:每次找到费用最小的增广路。(即以费用为权的最短路) 仅需将最大流中的 bfs 替换为SPFA(因为有负权)。代码如下: 1 #define MAXN 1005 2 #define MAXM 10005 3 #define INF 0x3f3f3f3f 4 using namespace std; 5 6 struct P{ 7 int u, v, cap, cost, next; //容量cap, 单位流量费用cost。 8 }e[MAXM*4];... 阅读全文

posted @ 2013-07-29 19:36 KimKyeYu 阅读(597) 评论(0) 推荐(0)

最大流 之 Edmond Karp 算法模版
摘要:算法简介:(复杂度 最坏O(VE^2) ) 不断寻找(bfs) 源点s 和 汇点t 之间的增广路,不断更新s流出量的值 以及 这条路上的 残余网络值,直到找不到增广路。 此时,s流出量的值达到最大,故称之最大流。 增广路:(不同于二分匹配那个) 这条路从源点开始一直一段一段的连到了汇点,并且,这条路上的每一段都满足流量 q;13 memset(vis, 0, sizeof(vis));14 pre[s] = s;15 vis[s] = 1;16 q.push(s);17 while(!q.empty()){18 int p =... 阅读全文

posted @ 2013-07-27 17:16 KimKyeYu 阅读(270) 评论(0) 推荐(0)

LCA 离线算法 Tarjan
摘要:转载一篇博客:http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.htmlTarjan实现: dfs + 并查集;通过这道题体会一下把:(思路详见上面的博客)hdu 2586 http://acm.hdu.edu.cn/showproblem.php?pid=2586 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 1... 阅读全文

posted @ 2013-07-22 19:45 KimKyeYu 阅读(270) 评论(0) 推荐(0)

sg 函数模版
摘要:1 #define MAXN 1005 2 3 using namespace std; 4 5 int s[MAXN], ns; //取值集合 6 int sg[10005]; 7 8 int mex(int x) 9 {10 if(sg[x] != -1)11 return sg[x]; 12 bool v[MAXN]; //x的后继集合13 memset(v, 0, sizeof(v));14 for(int i=0; i<ns; i++){ //求后继集合15 int t = x-s... 阅读全文

posted @ 2013-07-17 15:55 KimKyeYu 阅读(185) 评论(1) 推荐(0)

【转】旋转卡壳——凸多边形间对踵点对(定义)
摘要:凸多边形间对踵点对有向切线一个有向切线就如同其名字所阐述的。 有向切线在区分平行切线同向与反向时候是十分必要的。 进一步假设多边形是顺时针序的(当顶点顺序排布时候是顺时针的)并且多边形的切线当多边形在线的右侧时候是正向的。 相反的, 当多边形在切线的左侧时多边形能够按照逆时针序给出。 虽然只是约定, 但制定一些标准, 来避免混淆结构与结果是必要的。 并且采用这个约定绝不会影响结果并且带来任何限制。 注意: 切线的定义导出了对踵点对. 凸多边形间的对踵点对给定两个多边形 P 和 Q, 一对点 (p, q) (分别属于 P 和 Q), 当通过 p 和 q 的(有向)平行切线指向不同的方向时, 他们 阅读全文

posted @ 2013-07-11 20:15 KimKyeYu 阅读(598) 评论(0) 推荐(0)

二分图匹配(匈牙利算法模板)
摘要:最大匹配——匈牙利算法 1 /**************************************************** 2 二分图匹配(匈牙利算法的DFS实现) 3 INIT:g[][]两边定点划分的情况 4 CALL:res=hungary();输出最大匹配数 5 优点:适于稠密图,DFS找增广路快,实现简洁易于理解 6 时间复杂度:O(VE); 7 ****************************************************/ 8 #include 9 #include 10 #include 11 using namespace std;12. 阅读全文

posted @ 2013-07-07 12:49 KimKyeYu 阅读(228) 评论(0) 推荐(0)

【转】HDOJ题目分类
摘要:模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 1202 1205 1209 1212(大数取模) 1216(链表)1218 1219 1225 1228 阅读全文

posted @ 2013-07-07 12:42 KimKyeYu 阅读(385) 评论(0) 推荐(0)

【转】ACM 取石子问题
摘要:取石子问题有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的 法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走 阅读全文

posted @ 2013-07-07 12:37 KimKyeYu 阅读(332) 评论(0) 推荐(0)

【转】ACM博弈知识汇总
摘要:博弈知识汇总有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个 人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏 ,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够 取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意自然数,s≤m),那么 阅读全文

posted @ 2013-07-07 12:33 KimKyeYu 阅读(241) 评论(0) 推荐(0)

【转】POJ 题目整理
摘要:原地址:http://wenku.baidu.com/view/42d690134431b90d6c85c7ca.html初期:一.基本算法:(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, 阅读全文

posted @ 2013-06-11 23:07 KimKyeYu 阅读(716) 评论(0) 推荐(0)

【转】各大OJ题目分类
摘要:原地址 http://blog.csdn.net/linleiqin/article/details/5637647-----------------------------最优化问题------------------------------------- ----------------------常规动态规划 SOJ1162 I-Keyboard SOJ2096 Maximum Submatrix SOJ2111 littleken bg SOJ2142 Cow Exhibition SOJ2505 The County Fair SOJ2818 QQ音速 SOJ2469 Explori 阅读全文

posted @ 2013-06-09 12:50 KimKyeYu 阅读(366) 评论(0) 推荐(0)

导航