08 2011 档案

摘要:watashi大神推荐的题目就是给里呀~~~大意:求aa..a%m!的极限。欧拉定理的内容是:如果a和n互质,那么aφ(n)=1(mod n);对于任意a, n和较大的b,有ab=aφ(n)+b mod φ(n)(mod n)我们设aa..a=A则有A=aφ(n)+A mod φ(n)(mod n)这样就可以递归求解。因为φ(n)<n,所以这样递归一定有边界。接下来就是上欧拉函数模版,素数筛模版了。。另:要用longlong,不然会悲剧。。PS:还跟watashi大神学习了每组数据之间分空行,最后一组数据后面没有空行怎么打的问题~~2011-08-31 21:58:22Accepted2 阅读全文
posted @ 2011-08-31 22:07 ω 提拉米兔 ℃ 阅读(590) 评论(0) 推荐(0)
摘要:各种敲错啊啊啊啊……重写了一遍才过的……这个是模版题,用模版来筛出(a,b)区间内的素数因为n很大,所以不能直接用筛法来求素数,会超时,网上说的办法是先筛出一些素数,然后用这些筛出来的素数来筛后面的素数我是筛掉了2^16的素数,当所给区间的右端点小于这个值时,就直接用筛出来素数来求容易错的地方写在注释里面好了……#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#define INF 1000000+10#define 阅读全文
posted @ 2011-08-31 19:35 ω 提拉米兔 ℃ 阅读(229) 评论(0) 推荐(0)
摘要:hdu 1398 Square Coins最基础的普通母函数有n种硬币,每种硬币都有不同的价值,若需要组合出总价值m,问有多少种组合方式。硬币个数没有限制。2011-08-29 20:19:35Accepted139815MS332K797 BG++TiramituView Code #include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define MAXN 300usi 阅读全文
posted @ 2011-08-31 11:52 ω 提拉米兔 ℃ 阅读(250) 评论(0) 推荐(1)
摘要:POJ 2960 S-Nim大意:有n堆石子,每堆石子个数已知,两人轮流从中取石子,每次可取的石子数x满足x属于集合S(k) = {s1,s2,s3...sk-1},问先拿者是否有必胜策略?分析:1.可将问题转化为n个子问题,每个子问题分别为: 从一堆x颗石子中取石子,每次可取的石子数为集合S(k)中的一个数2.分析(1)中的每个子问题, 易得:SG(x) = mex(SG[x-s[i]])(0<i<k-1);3.后面就是SG函数的应用,根据Sprague-Grundy Therem:g(G)=g(G1)^g(G2)^g(G3)^...^g(Gn) 即游戏的和的SG函数值是它的所有 阅读全文
posted @ 2011-08-31 11:19 ω 提拉米兔 ℃ 阅读(847) 评论(0) 推荐(1)
摘要:比赛的时候素数表打搓了……后来实在没办法就改成给一个k就用根k的复杂度把它分解掉,然后4500MS蹭过去了……下来知道还是要打素数表的。。先开始打素数表的时候prime[0]怎么打都是1,搞得我烦死,后来我一看,我的MAXN和PRIME设定了以后,开数组的时候忘记的+10,导致最后越界,可能就会出错吧。改过来就没事了。。。先开始还犯了两个错误:1.k,n搞反了 2.分子分母搞反了……思路就是,这个题只用对k做素数分解,然后看它在n!中相应的素数的指数,从而求出i的最大值。PS:这是我第一次看见cin,cout比scanf,printf快的……而且关了同步还会wa。。2011-08-31 10. 阅读全文
posted @ 2011-08-31 10:43 ω 提拉米兔 ℃ 阅读(474) 评论(0) 推荐(0)
摘要:zz:http://blog.sina.com.cn/s/blog_55a8a96d010005eb.html首先讨论石头堆两堆两堆相等的情况,例如x,x,y,y,z,z.6堆的情况.在这种情况下先取的必输,很简单,先取的那人怎么取后取的那人就怎么取(如果对方把石头分配到一堆上,你就分配到与之对应的堆上),总之保持这个相等的均势不变,这样到最后,后取的人就将取走最后一堆石头.知道这个结论后,就可以把N堆中两两相等的堆去掉,来讨论互不相等的堆来.第一,只有一堆x,第一个人直接全部取走就胜利了.(显然x,y,y的情况也是第一人胜,所以忽略相等的石头);第二,x,y的形式(这里不妨假设递增,下同). 阅读全文
posted @ 2011-08-28 10:51 ω 提拉米兔 ℃ 阅读(259) 评论(0) 推荐(0)
摘要:直接发分析了,代码太短也没什么好说的……博弈论题目可以用寻找必败状态的方法解决。第一个必败状态是2001.11.04。由此可以推出其他任何时间的状态。对于除2001.11.04外的其他任何时间,present状态是由能移动到的下两个next状态决定的(当然有些时间只有一个next状态),比如1924.12.19的状态是由1924.12.20和1925.01.19两个状态决定。如果两个next状态中有一个必败状态,则present状态为必胜状态;如果两个next状态都为必胜状态,则present状态为必败状态。对于2001年11月的那4天,状态都是交替胜负的。1和3号必胜,2和4号必败。现在考虑 阅读全文
posted @ 2011-08-28 09:41 ω 提拉米兔 ℃ 阅读(359) 评论(0) 推荐(0)
摘要:zz: http://hi.baidu.com/zhulei632/blog/item/657efefaf299b1dbb58f3152.html问题分析:威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9. 阅读全文
posted @ 2011-08-28 00:59 ω 提拉米兔 ℃ 阅读(235) 评论(0) 推荐(0)
摘要:转载自http://blog.csdn.net/logic_nut/archive/2009/10/22/4711489.aspx推荐看看:http://www.math.ucla.edu/~tom/学习理论在这里:http://www.math.ucla.edu/~tom/Game_Theory/Contents.html博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多。(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要看“博弈论”的时 候。)Nim游戏是博弈论中最经典的模型(之一?),它又有 阅读全文
posted @ 2011-08-27 00:59 ω 提拉米兔 ℃ 阅读(385) 评论(0) 推荐(0)
摘要:假设N的电势为0,电流为1然后假设1~N-1的电势,利用电流守恒来建立方程,解一个方程组即可。又是标程……当满秩时高斯消元的模版好了2011-08-26 20:54:21Accepted39760MS236K1093 BG++Tiramitu#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<cstring>using namespace std;double ans[60],d[60][60],eps=1e-9;int n,m;voi 阅读全文
posted @ 2011-08-26 21:19 ω 提拉米兔 ℃ 阅读(358) 评论(0) 推荐(0)
摘要:多校确实能学到很多东西呀~~~看了题解,大概意思是说,这个题是在2*n+1个数中找1个数那种问题的加强版。对于这个简单一点的问题,只要把小球的编号依次异或就可以了,这里就不行,于是我们想到开一个31*31的数组,cnt[i][j],表示第i位是1同时第j位也是1的数字的个数。把整个数组模三,于是整个数组里面就剩下多余的两个数a,b了,我们先来考查cnt[i][i] 。如果a==b,那么cnt[i][i]不是零就是二,那么很容易就得出a,b的值。如果存在i,使得cnt[i][i]==1,那么不妨设只有a在第i位上是1。那么cnt[i][j]就唯一表示的a了。这样就把a求出来了。然后遍历cnt[i 阅读全文
posted @ 2011-08-26 12:34 ω 提拉米兔 ℃ 阅读(378) 评论(0) 推荐(0)
摘要:大意:题目要求对于每一个n,输出他的所有因子之和这个题乍一看和poj1845很像,的确可以用poj1845的方法来做,但是这个题的数据规模比poj小很多,我在网上搜了一下,居然这个可以用筛法做,像筛素数那样,把所有i的倍数都加上i……学习啦~~2011-08-25 10:39:27Accepted121593MS2148K319 BG++Tiramitu#include<cstdio>#define MAXN 500000int array[MAXN+10];int main(void){ int i,j; array[0]=0; array[1]=0; for(i=1... 阅读全文
posted @ 2011-08-25 10:40 ω 提拉米兔 ℃ 阅读(268) 评论(0) 推荐(0)
摘要:这道题wa到我快吐了……主要是因为计算欧拉函数的时候是先乘再除的,因该反过来,但是不知道这样为什么会wa,还有就是素数筛写搓了,标程的素数筛改成我的就wa了……这道题n很大,我们套用polya公式的时候就不能枚举i了,只能反过来枚举循环的长度L证明就不说了,别的解题报告都有……对于每一个长度L,都有若干i使得gcd(n,i)=n/L,那么在polya公式里面,n^gcd(n,i)就有euler(L)个。因为L|n,所以只用枚举到L*L<n后来才发现p不是素数,所以在除总数n的时候不可以用素数取逆方法直接算,就用的标程的方法,如下注释。还有就是,现在还不知道哪里应该取模哪里不应该取模,哪里 阅读全文
posted @ 2011-08-24 14:59 ω 提拉米兔 ℃ 阅读(412) 评论(0) 推荐(0)
摘要:这是我的第一道polya噢~~~~昨天看了一遍简单群论,又看了一点burnside和polya,今天把昨天看的又复习了一遍,就开了一道题开始做大意:给你一个有s个珠子的手镯,再给你c种颜色,让你给手镯染色,问能染出多少种不同颜色的手镯。先开始就想到了旋转的情况,没有想到还有翻转的情况,因为我的书上没有讲翻转的情况。后来跟队友讨论了一下,原来还有两串珠子本来一样,但是旋转不能重合的情况!!所以还要算旋转的情况旋转的情况:对每一个s,有s种旋转方法,i表示转几个珠子,那么循环的个数为gcd(s,i)至于为什么有这个结论,我现在还没想清楚……翻转的情况:当s是偶数时,分按边翻转和按点翻转 按边:有n 阅读全文
posted @ 2011-08-22 19:35 ω 提拉米兔 ℃ 阅读(356) 评论(0) 推荐(0)
摘要:昨天用的那个模版搞不了这个题……只能随用随算了预处理还是每一次都把阶乘和逆求出来这次求逆用的是欧拉定理,査了信数书才发现的,原来求逆可以不用欧几里德呀!这次尝试用了一下TC模版,挺有意思的……以后就这么上好了还有就是乘法的时候注意要强制类型转换,否则会溢出2011-08-21 10:18:28Accepted30371250MS708K1437 BG++Tiramitu#include <cstdio>#include <cstring>#include <cstdlib>#include <cctype>#include <cmath&g 阅读全文
posted @ 2011-08-21 10:26 ω 提拉米兔 ℃ 阅读(435) 评论(0) 推荐(0)
摘要:自己敲的lucas定理MLE了……把官方题解和官方解题报告贴过来当模版好了……显然第 n 行第 k 列的数就是组合数 C(n,k) ,答案满足对称性。只需要讨论 k <=n / 2 的情况。考虑从目的地往上走到顶点,因为组合数在 k <= n / 2 是递增的,所以每次只要斜向上走,到了最左端,再往上走就可以得到最小的和,所以最小的和为C(n,k)+C(n-1,k-1)+C(n-2,k-2)+......+C(n-k,0)+n-k;下面就是求这个数的问题。用 C(n-k+1,0)替换掉 C(n-k,0)后,得到:C(n-k+1,0)+C(n-k+1,1)+C(n-k+2,2)+.. 阅读全文
posted @ 2011-08-20 23:46 ω 提拉米兔 ℃ 阅读(830) 评论(2) 推荐(0)
摘要:这个题快把我搞吐了……有很多细节没有注意……1.题目给的坐标不是我们平时用的向下增长的2.处理字符的时候忘记用字符串读入3.没有注意只要发现一组crash,就打出来,以后的不用管了4.在敲程序的时候只要发现了一组crash,就直接从这组测试数据里面跳出来,没有注意后面还要读入数据,以免影响下一组测试数据5.在机器人开始动以后不管它是否发生crash,都要把它原来的位置置零6.在机器人没有发生crash的时候,就要把它的新位置在map上标明7.先开始处理边界的时候居然写成<0了,晕……8.忘记删文件导致RE…………?!(记得原来只有WA或者TLE,没想到还有RE……)上代码:a274002 阅读全文
posted @ 2011-08-15 23:39 ω 提拉米兔 ℃ 阅读(255) 评论(0) 推荐(0)
摘要:勒让德两平方数之和定理:R(N)=4*D1(N)-4*D3(N)D1(N)=(整除N且满足d=1(mod4)的正约数d的个数),D3(N)=(整除N且满足d=3(mod4)的正约数d的个数)。先开始枚举的n的约数,后来超时了,就改成了这个版本的……#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int main(void){ int n; while(scanf("% 阅读全文
posted @ 2011-08-10 21:37 ω 提拉米兔 ℃ 阅读(502) 评论(0) 推荐(0)
摘要:由题意,要求A^B的所有约数之和%9901。A可以唯一分解成p1^a1*p2^a2*...*pn^an,A^B=p1^(a1*B)*p2^(a2*B)*...*pn^(an*B);A^B的所有约数之和=[1+p1+p1^2+...+p1^(a1*B)]*[1+p2+p2^2+...+p2^(a2*B)]*[1+pn+pn^2+...+pn^(an*B)].而等比数列1+pi+pi^2+pi^3+...+pi^n可以由二分求得,思想是把式子从中间断开。若n为奇数,一共有偶数项,设p为3,则(1+p)+(p^2+p^3)=(1+p)+p^2(1+p).若n为偶数,一共有奇数项,设p为4,则(1+p 阅读全文
posted @ 2011-08-10 10:32 ω 提拉米兔 ℃ 阅读(329) 评论(0) 推荐(2)
摘要:题意:求正整数K(4 <= K <= 10100)是否有一个素因子是比L(2 <= L <= 106)小的。思路:大数模运算,让比L小的所有素数去除K,如果余数为0则表示存在。先预处理打一张素数表,然后对K按1000000000进制进行分解。先开始写搓了很多地方,打素数表的时候居然忘记了用筛法,结果就很悲剧地TLE了……然后就是高精度取模那个地方写错了,现在还没有明白为什么要用long long来存ans,我已经把所有数字的范围控制在106以内了啊……幸亏我拆数字的地方没有写错,不然还得调……a274002635Accepted1740K1094MSG++1124B20 阅读全文
posted @ 2011-08-08 20:09 ω 提拉米兔 ℃ 阅读(242) 评论(0) 推荐(0)
摘要:dp还是不会啊啊啊……今天被这个题虐惨了……主要是01背包都不会……去看了背包九讲的01背包部分,大概会写了,就是有两个地方不懂,以后再想吧……一个是为什么dp[i][j]要初始化为0二是为什么k的那层循环要在最里面三是为什么k要倒着枚举……求路过大神指点啊啊啊……a274003132Accepted452K0MSG++807B2011-08-05 22:09:44#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>in 阅读全文
posted @ 2011-08-05 22:17 ω 提拉米兔 ℃ 阅读(254) 评论(0) 推荐(0)
摘要:from http://www.oiers.cn/pack/Index.html第一讲 01背包问题这是最基本的背包问题,每个物品最多只能放一次。第二讲 完全背包问题第二个基本的背包问题模型,每种物品可以放无限多次。第三讲 多重背包问题每种物品有一个固定的次数上限。第四讲 混合三种背包问题将前面三种简单的问题叠加成较复杂的问题。第五讲 二维费用的背包问题一个简单的常见扩展。第六讲 分组的背包问题一种题目类型,也是一个有用的模型。后两节的基础。第七讲 有依赖的背包问题另一种给物品的选取加上限制的方法。第八讲 泛化物品我自己关于背包问题的思考成果,有一点抽象。第九讲 背包问题问法的变化试图触类旁通 阅读全文
posted @ 2011-08-05 20:26 ω 提拉米兔 ℃ 阅读(210) 评论(0) 推荐(0)
摘要:话说都做了那么长时间DP了,对DP还是一点感觉都没有……还是得看别人的代码才能AC……大意:给你一个text,你要把单词一行一行排起来,每一行最多不能超过m个字符(包括空格),假设每一行的长度为len,那么要求使所有(m-len)*(m-len)的和最小。其中dp[i]表示的是要把前i个词放好的最小值对于每一个dp[i],向前找单词继续放进去,直到放不下为止,找这个过程中的总的最小值存在dp[i]中。a274003390Accepted436K47MSG++643B2011-08-05 17:05:05#include<cstdio>#include<cstdlib># 阅读全文
posted @ 2011-08-05 17:22 ω 提拉米兔 ℃ 阅读(306) 评论(0) 推荐(0)
摘要:大意:ZZZ 喜欢睡觉,一堂课有N分钟,他至少要睡M分钟,他一旦听课就要连续地听L分钟。每分钟都有一个他可以拿到的分数。求他可以得到的最大分数。dp[i][j]在第i分钟,已经休息了j分钟的时候能得到的能得到的最大分数。sum[i]记录i以及以前的分数和。防止重复计算。状态转移方程dp[i][j]=max(dp[i-1][j-1],max(dp[i-k][j]+sum[i]-sum[i-k]))其中k>=l,k<=i-j 表示这分钟睡觉了 表示这分钟在学习如果我们在每次循环的时候都把max(dp[i-k][j]+sum[i]-sum[i-k])重新算一遍,这样会超时。res数组用来 阅读全文
posted @ 2011-08-04 21:50 ω 提拉米兔 ℃ 阅读(365) 评论(0) 推荐(0)
摘要:打比赛的时候想这个题想了好长时间啊啊啊啊……后来谁知道这道题居然是神题啊啊啊啊……官方题解:引理 1:若 cosA 为有理数,n 为整数,则 cos(nA)也为有理数。证:n=1,2 时,cos(nA)为有理。若 n=1..k 时均成立,即 n<=k 时,cos(nA)为有理数,此时有 cos(kA) =cos((k-1)A)*cos(A) - sin((k-1)A)*sin(A), sin((k-1)A)*sin(A)故有理。当 n=k+1 时:有 cos((k+1)A) = cos((k-1)A)*cos(2A) - sin((k-1)A)*sin(2A) =cos((k-1)A)* 阅读全文
posted @ 2011-08-03 20:27 ω 提拉米兔 ℃ 阅读(322) 评论(0) 推荐(0)
摘要:多校又被虐惨了…… 这个题下来写了一下 就是因为没有加memset和去掉freopen wa了几次……官方题解:直接暴力枚举 O(N^3*GCD)会超时。可以先计算出有一组互素或者两组互素的所有三元组个数 sum,最后把所有三元组的个数减去 sum。计算 a 可以做到 O(N^2*GCD)。可以这样来求一组互素或者两组互素的三元组:对于每个数 Ai,设与 Ai 互素的数在集合 Ni 中,与 Ai 不互素的数在集合 Mi 中,这样 Ai 和 Ni 中的一个数以及 Mi 中的一个数构成了“一组互素或者两组互素”这种情况,一共有|Ni|*|Mi|种情况。设实线表示互素,虚线表示不互素,那么一组互素( 阅读全文
posted @ 2011-08-03 19:28 ω 提拉米兔 ℃ 阅读(286) 评论(0) 推荐(1)
摘要:这段时间都在做DP啊啊……大意:有F朵花和V个花瓶,F<V,不同的花在不同的花瓶里面观赏价值不一样,每个花瓶只能插一束花,而且花要按顺序插。求最大观赏价值。这个题关键就是有负值,注意初始化,在代码里面说把。。状态转移方程:dp[i][j]表示把i朵花插到j个花瓶里面能获得的最大美学价值则dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+map[i][j])PS:我现在都没明白怎么看题目满足最优子结构性质……汗啊啊啊啊啊……Problem:1157User:a27400Memory:484KTime:32MSLanguage:G++Result:Accepted#i 阅读全文
posted @ 2011-08-03 11:57 ω 提拉米兔 ℃ 阅读(432) 评论(0) 推荐(0)
摘要:大意:给你一串只有1,2的数字,让你改变最少的次数,让这个序列变成非递减的。先开始看这个题目,完全不会做,去网上百度了一下,居然说这个题是求最长非递减子序列的长度,但是用nlogn算法求非严格递增的子序列长度我不会,只能另想办法。在网上搜到了一个神码,我现在都不知道为什么:#include<cstdio>int i,n,a,f[3]={0};int main(){ scanf("%d",&n); for(i=0;i<n;++i) { scanf("%d",&a),++f[a]; if(f[2]<f[1])f[2]= 阅读全文
posted @ 2011-08-01 16:25 ω 提拉米兔 ℃ 阅读(391) 评论(0) 推荐(0)