上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 27 下一页
摘要: 题意:模拟约瑟夫环。有N(1<=N<=500000)个孩子,从第K(1<=K<=N)个开始。接下来N行中,每行有这个孩子的名字和数字pos(绝对值小于10^8,表示接下来第N个孩子出局),第P个出局的孩子会得到F(P)的糖果的数目。F(P)定义为:P的因子的数目。这题我们用线段树来模拟约瑟夫循环:这题的关键是两个公式,如果从当前的k位置和pos推出下一个孩子的k(其中k表示在当前状态下第几个,pos表示在数组中的下标。)如果num>0。k=(k-1+node[pos].num)%n+1。。但是之前这个位置的那个人已经被删除,现在的k-1表示是的原来的那个孩子的下一 阅读全文
posted @ 2012-07-24 11:51 wutaoKeen 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 这个题是一个约瑟夫问题,然而是要找规律的:设剩下人数为n,若n是偶数,则一轮过后只剩下奇数位的人,有n = n / 2,原本在奇数位的数字变成(k+1) / 2;若n是奇数,则一轮过后只剩下奇数位的人,特别的原本为第一位的也应被删除,原本第3位的变成第一位,于是有n = (n-1) / 2,原本在奇数位的数字变成(k-1) / 2;经过有限次数后,n一定变成1,这就是最后的save。因此逆推上去就知道save开始所处位置了。View Code #include<iostream>#include<cstdio>#include<cstdlib>#includ 阅读全文
posted @ 2012-07-22 11:14 wutaoKeen 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 直接打表:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string>#define LL long longusing namespace std;void 阅读全文
posted @ 2012-07-22 09:58 wutaoKeen 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 直接打表:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string>#define LL long longusing namespace std;/*cl 阅读全文
posted @ 2012-07-21 22:59 wutaoKeen 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 约瑟夫循环问题:Josephus假设n个竞赛者排成一个环形,依次顺序编号1,2,…,n。从某个指定的第1号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始重新计数,继续进行下去。这个过程一直进行到所有的人都出列为止。最后出列者为优胜者。无论是用链表实现还是用数组实现来解约瑟夫问题都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较麻烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。注意到原问题仅仅是要求出最后的胜利者的序号,而不是要模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。为了讨论方便,先把问题稍 阅读全文
posted @ 2012-07-21 16:30 wutaoKeen 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 扩展欧几里得的运用:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#define LL long longusing namespace std;LL Ex_Gcd( LL a , LL 阅读全文
posted @ 2012-07-20 23:01 wutaoKeen 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 由于bi,bj不保证互素,不能用直接套中国剩余定理,做法是利用欧几里德扩展定理,将两个等式合并,然后再与其他的等式一一合并对于x=b1 mod a1,x= b2 mod a2,设x=b1+m1*a1 , x = b2 + m2*a2;所以 b1 +m1*a1 = b2 + m2*a2;所以a1*m1=b1-b2 mod a2,利用欧几里德扩展定理求出最小的非负m1,那么x=b1+m*a1就已知,且x最小,如果无解,整个同余式组无解;同时,x+k*a1是所有满足x≡b1 mod a1的解,而x+k'*a2又是所有满足x≡b2 mod a2的解那么,将x+k*b1与x+k'*b2合 阅读全文
posted @ 2012-07-20 21:32 wutaoKeen 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 1.5 中国剩余定理出自Bupt_wiki跳转到: 导航, 搜索这篇文章写的很清晰,所有就COPY过来了,与大家分享;●知识精讲 这个问题源自于我国数学古书《孙子算经》中的一道问题:“今有物,不知其数,三三数之,剩二;五五数之,剩三;七七数之,剩二。问物几何?”意思是一个整数除以三余二,除以五余三,除以七余二,求这个整数(满足条件且最小)。做法是: n%3=2,n%5=3,n%7=2且3,5,7互质 找到使(5×7)的倍数模3得1的数,答案是70 找到使(3×7)的倍数模5得1的数,答案是21 找到使(3×5)的倍数模7得1的数,答案是15 那么(70× 阅读全文
posted @ 2012-07-20 16:31 wutaoKeen 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 这题是给定你一个区间,求里面的第K大的数;这里用到划分树:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>using namespace std;class Node{public: int 阅读全文
posted @ 2012-07-19 23:28 wutaoKeen 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 这个也是一道对划分树的简单的运用:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>using namespace std;class Node{public: int num[100024] 阅读全文
posted @ 2012-07-19 21:39 wutaoKeen 阅读(167) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 27 下一页