上一页 1 2 3 4 5 6 7 ··· 10 下一页
摘要: 转自:http://www.cnblogs.com/jffifa/archive/2011/12/17/2291061.html研究发现,SPFA加上SLF(Small Label First)优化时,是不能用“某个点的入队列次数>点数”这一条件来判负环的。数据举例如下:(u, v, d)V=4, E=60 1 00 2 00 3 02 1 -13 1 -23 2 -2则按照SLF,1这个点将被入队5次,而图显然不存在负环(根本不存在环)。究其原因在于SLF不保证被松弛点在被另外一个点松弛时还在队列中。那么必须换一种方法判负环。wikipedia提供了一种不错的选择:易知,无论在什么样的 阅读全文
posted @ 2012-09-30 14:50 pony1993 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 题意:M种牌放到M堆里,M种牌和M堆都是从1-M编号的。输入 M, 然后输入M个数,表示M种牌分别有多少张,同时也表示M堆分别的最大容量是多少。游戏是这样玩的,从第一堆开始由顶向下取,取到的牌属于第k种,就接着到第k堆取。当任何一次取不到牌时,游戏结束。求游戏结束时牌恰好被取完的概率。答案竟然就是 a1/(a1+……+an)代码: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 int main() 6 { 7 int t,n,i, 阅读全文
posted @ 2012-09-30 10:04 pony1993 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 这个是经典的Eraosthenes筛法:1 for (int i = 2; i * i < N; i++)2 {3 if (tag[i]) continue;4 for (int j = i; j * j < N; j++)5 tag[i*j] = 1;6 }7 for (int i = 2; i < N; i++)8 if (!tag[i])9 prime[tol++] = i;但是Eraosthenes筛法的速度并不快,原因在于对于一个合数,这种方法会重复的标记。一种线性筛素数的方法有效的解决了这一点,代码如下: 1 void get... 阅读全文
posted @ 2012-09-27 08:22 pony1993 阅读(3194) 评论(3) 推荐(0) 编辑
摘要: 题意:跟POJ3281基本上一样的拆点网络流。建图:建一超级源点和一超级汇点,源点与食物相连,边权为其数量,汇点与饮料相连,边权也为其数量,把人分成两个点,之间的边权为1。每个人与之需要的食物和饮料相连,边权为1。代码(SAP模板): 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 #include <queue> 6 using namespace std; 7 const int maxn=101050; 阅读全文
posted @ 2012-09-26 12:00 pony1993 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 题意是给定一些牛,一些食物,一些饮料,每头牛都有其喜欢的几种食物和几种饮料,求最多能给多少头牛即找到食物又找到饮料~也就是有多少个 牛---食物---饮料 的匹配,而且满足一一匹配,每个牛,食物,或饮料都只能使用一次。网络流的限制是加于边上的,而对于点就没办法了,但是我们可以制造边,也就是把原来的一个点拆成两个,中间连一条边,加上限制,就OK了~~这种思想很好~~得好好学~然后就把图建成了下面那样,牛的使用次数也限制成了1。http://acm.sdut.edu.cn/bbs/read.php?tid=1614 阅读全文
posted @ 2012-09-25 19:12 pony1993 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 问题:找出所有使得 2n- 1 能被 7 整除的正整数 n 。答案:由于 2n的二进制表达为 1000…00 (n 个 0),因此 2n- 1 的二进制表达为 111…11 (n 个 1)。而 7 的二进制表达是 111 ,要想让它整除 n 个 1 ,显然 n 必须是也只能是 3 的倍数。问题:是否存在 100 个数,使得它们的和等于它们的最小公倍数?答案:是的。考虑 3, 2 × 3, 2 × 32, 2 × 33, …, 2 × 398, 399,它们的和为:3 + 2 × 3 + 2 × 32+ 2 × 33+ … + 阅读全文
posted @ 2012-09-23 21:11 pony1993 阅读(833) 评论(2) 推荐(0) 编辑
摘要: 按si+wi的和排序贪心即可 1 #include <algorithm> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cstdio> 5 #define LL __int64 6 using namespace std; 7 const int maxn=100001; 8 struct node 9 {10 LL w;11 LL s;12 }p[maxn];13 bool cmp(const node a, const node b)14 {15 return a.w+a.s& 阅读全文
posted @ 2012-09-17 18:49 pony1993 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长, 这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做回文串问题中时比较烦的地方。这个算法还有一个很好的地方就是充分利用了字符匹配的特殊性,避免了大量不必要的重复匹配。 算法大致过程是这样。先在每两个相邻字符中间插入一个分隔符,当然这个分隔符要在原串中没有出现过。一般可以用‘#’分隔。这样就非常巧妙的将奇数长度回文串与偶数长度回文串统一起来考虑了(见下面的一个例子,回文串长度全为奇数了),然后用一个辅助数组P记录以每个字符为中心的最长回文串的信息。P[i.. 阅读全文
posted @ 2012-09-16 10:48 pony1993 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n和k,确定C(n,k)的奇偶性题解:只要算出分子分母中各自包含的质因数2的个数,如果分子的大于分子,就是偶数,反之则是奇数。以下摘自网络:根据【数学通讯(2006年第一期)】“二项式系数奇偶性的判定准则”:C(n,k)(k<=n)的奇偶性取决于(n-k)与k的二进制表达式是否存在同一位上的两个数码均为1,若存在,则为偶数,反之为奇数代码实现: 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 int main() 6 阅读全文
posted @ 2012-09-15 10:43 pony1993 阅读(250) 评论(0) 推荐(0) 编辑
摘要: deque和vector一样都是标准模板库中的内容,deque是双端队列,在接口上和vector非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector容器,下面提供deque的成员函数和操作,进行对比参考。Deque成员函数函数描述c.assign(beg,end)c.assign(n,elem)将[beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range。c.back()传回最后一个数据,不检查这个数据是否存在。c.begin()传回迭代器重的可一个数据。c.clea 阅读全文
posted @ 2012-09-14 18:11 pony1993 阅读(207) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 10 下一页

View My Stats