自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 hdu 4474 Yet Another Multiple Problem bfs

题意:输入n和m,接着输入m个十进制的数字,求最小的数ans,使得ans是n的倍数(除了0),且ans中不包括输入的十进制数字。不存在输出-1.题解:这是一道广搜题,先找出所有可以组合ans的数字,然后就是按位枚举所有的组合(从长度为1的开始)。需要用同余剪枝,若a耗时:3000MS/20000MS#include #include #include #include

2013-10-27 16:57:34 771

原创 hdu 4465 Candy 组合数(快速排列组合)

耗时:G++(15MS/1000MS),C++(TLE)。。。题解代码:#include#include#include#include#include using namespace std;#define LL long longint main(){ int n,tt=0; double p; while(scanf("%d%lf",&n,

2013-10-27 15:51:50 834

原创 hdu 3537 Daizhenyang's Coin 博弈(Nim游戏+sg定理+找规律)

题意:已知一排硬币中有n个硬币正面朝上,输入正面朝上的硬币的位置ai。两人轮流操作,每次操作可以翻转1,2,或则3枚硬币,其中翻转的最右的硬币必须是正面朝上的,最后不能翻转的为负。理解题意理解了半天,还差点理解错了。。题解:我们发现这是个Nim游戏,简单化题目,就是将一个游戏分成多个子游戏。这题是分出的子游戏是,只有一个正面朝上的硬币,位置在ai,求出所有该类sg函数值sg[ai]。则答案就是

2013-10-26 17:23:02 2034 1

原创 hdu 3032 Nim or not Nim? 博弈(SG定理+找规律)

题意:给定n堆石子,两人轮流操作,每次选一堆石子,取任意石子或则将石子分成两个更小的堆(非0),取得最后一个石子的为胜。题解:比较裸的SG定理,用sg定理打表,得到表1,2,4,3,5,6,8,7,9,10,12,11...可以发现当x%4==0时sg[x]=x-1;当x%4==3时sg[x]=x+1;其余sg[x]=x。然后异或下就出来结果了。主要还是用学会SG定理。详细的可以百度,或则看我

2013-10-26 15:57:14 1163

原创 hdu 2897 邂逅明下 博弈

题意:中文,自己看吧,前面都是废话,只有倒数第2段有用。题解:跟以前的取石子一样,这里限制课最多q,最少p,当方法还是一样的。无论第一个人取多少硬币,第二个人必定可以取硬币使得两人取的硬币数和为p+q。则令s=n%(p+q)。如果0耗时:46MS/1000MS#include #include using namespace std;int main(){

2013-10-26 15:05:50 802

原创 hdu 1525 Euclid's Game 博弈

题意:有两个数a,b,每次操作将较大值减去较小值的倍数,但不能减到小于,轮流操作,当较小值为0时为胜。题解:类似求最大公约数,最后必定要使较大值比较大值小,定为子游戏,如a>b,最后a=a%b。可转化为类似取石子的游戏。例:a=25,b=7-->a=7,b=4-->a=4,b=3-->a=3,b=1-->a=1,b=0;(3,1,1,3)为每次子游戏最多可取的数,即a=25,b=7-->a=7

2013-10-26 13:45:59 898

原创 lightoj 1077 - How Many Points? 最大公约数

题意:求一线段上整数点的个数,整数点(x,y),x和y均为整数。题解:一段线段(x1,y1)(x2,y2)上的整数点个数为gcd(abs(x2-x1),abs(y2-y1))+1;这个可以通过相似三角形来证明。这题只需要注意下超int就OK了。#include #include #include #include #include using namespace st

2013-10-22 16:28:18 1145

原创 lightoj 1067 - Combinations 组合数取模

题意:求组合数C(n,k)%mod,mod=1e6+3;题解:看别人都是lucas定理来解的,怎么看怎么不会用到这题上。。我自己暴力了。用sum[i]记录1*2*...*i%mod。pows[i]记录pow_mod(1,mod-2)*...*pow_mod(i,mod-2)。pow_mod(b,mod-2)为b的逆元,可用费马定理来证明。从而得出a/b%mod=a*b^(mod-2)%mod。

2013-10-22 15:50:08 1298

原创 lightoj 1054 - Efficient Pseudo Code 求所有n^m的所有因子和

题意:求n^m的所有因子和。题解:我们需要先知道,一个数X=p1^t1*p2^t2*...*pk^tk(pi为素数),还需要知道X的所有因子和sum(X)=(p1^0+p1^1+...+p1^t1)*...*(pk^0+pk^1+...+pk^tk)。证明略,以前证明过,可以自己在我其他文中找下,好像那题跟这题一样,就是因子都是排列组合ti得到的。所以结果就很简单了,n^m=p1^(t1*m)

2013-10-22 14:13:59 1141 2

原创 lightoj 1045 - Digits of Factorial 取对数

题意:求n!的长度。题解:我们需要知道log10(n)=a+b(a是整数,b是小于1的小数)。则a是n在十进制下的长度-1。为什么?根据性质就可以推出来,10^(a+b)=10^a*10^b,10^b必定小于10,大于等于1。接下来就简单,log(2,10)=log10/log2。所以p=log(n!)/log(base)=(log(1)+log(2)+...+log(n))/log(base

2013-10-22 13:17:15 1182

原创 lightoj 1028 - Trailing Zeroes (I) 欧拉函数

题意:求一个数n,有多少种进制表示方法,使得末尾为0.例子:9=(30)三进制题解:我们知道二进制(1101)=1*2^0+0*2^1+1*2^2+1*2^3=13。转换成n进制之后,若末尾为0。则原十进制数必定被n整除。相对应的当一个数是n的倍数的时候,必定能转换成末尾为0的n进制。所以该题就是求输入数的约数个数。求下欧拉函数就好。注意:由于输入的数很大n=10^12,且测试数据很多T=

2013-10-20 15:55:16 1504

原创 lightoj 1007 - Mathematically Hard 欧拉函数

题意:求[a,b]范围内所有整数的欧拉函数的平方和。欧拉函数:求不大于其本身的与其互质的数的个数。题解:预处理,欧拉函数筛选下,之后保存前n项和,sum[n]。答案就是ans=sum[b]-sum[a-1]。注意:1.之后结果很大,需要用无符号64位整数,unsigned long long。lightoj好像不能用__int64。2.内存足,开两个5e6的数组会爆内存,所以前n项

2013-10-20 14:13:37 1194

原创 lightoj 1109 - False Ordering 因式分解+排序

#include #include #include #include #include using namespace std;const int maxn=1010;int c[maxn];struct node{ int x,w; }e[maxn];int cmp(node a,node b){ if(a.w==b.w)return a.x>b.x;

2013-10-20 13:32:31 1023

原创 lightoj 1035 Intelligent Factorial Factorization 因式分解

题意:因式分解n!。题解:n很小,#include #include #include #include #include using namespace std;const int maxn=101;int vis[maxn],t,prime[maxn];int c[maxn][maxn],ans[maxn];void init(){ in

2013-10-20 13:14:37 863

原创 hdu 1717 小数化分数2

题意;将小数化成分数,小数包括普通小数(有限小数)和无线循环小数。题解:普通小数,很简单,肯定能乘以一个10^k后变为整数,即小数a*10^k=b(b为整数),所以a=b/10^k。通分下就OK了。再是无线循环小数,拿样例中的a=0.32(692307)来说明方法,a*10^6=326923.07(692307)-->a*10^6-a=(10^6-1)*a=326923.07-0.32-->(

2013-10-19 14:30:43 1347

原创 hdu 1452 Happy 2004 因子和

题意:输入x,求2004^x的所有因子的和,结果对29取余。题解:肯定不能暴力的,需要想别的方法,我们知道的是:一个数X=p1^t1*p2^t2*...*pk^tk(其中pi为质数)。则因子个数为(t1+1)*(t2+1)*...*(tk+1)。怎么得出的?枚举每个指数0~ti,我们就可以得到所有的因子。所以因子和sum=p1^0*p2^0*...*pk^0+p1^0*p2^0*...*pk^

2013-10-17 17:45:27 986 1

原创 hdu 1111 Secret Code dfs

题意:给定复数x和复数b,求序列ai使得x=a0+a1*b+a2*b^2+...an*b^n。其中nai>=0,|b|>1.题解:先吐槽下:有将B^n这么写成Bn的吗,虽然我直接就理解了,可也会害死人的。接着是方法:先要知道复数的运算方法,具体百度,这里只简要说明,复数的模:|Z|=|a+bi|=sqrt(a*a+b*b);复数除法:令t=c*c+d*d,(a+bi)/(c+di)=(ac+b

2013-10-16 16:42:54 1525

原创 hdu 1104 Remainder BFS

题意:输入n,k和m,通过+m,-m,*m,%m四种操作,使得结果等于(n+1)%m,求最少的操作。如果不可能输出0。题解:先自我反省下。。每次都习惯的把循环变量写i,j,k;而且即使不用到也会定义,在这题中被自己坑了两次。在自定义函数和主函数中都定义了k。。最后重复定义了。在说方法,一道典型的广搜题BFS,需要考虑的是要使操作次数有限化:我们知道%(k*m)%k和%k的结果必定相同,这个不同

2013-10-16 14:46:47 1240

原创 hdu 2483 Counting square 枚举

题意:给定一个由0和1构成的n*m矩阵。问矩阵中符合条件的子矩阵有多少个?条件:1.边长大于等于2的正方形;2.四边都没有0;3.除4边外的部分,0和1的个数差小于等于1(这里被自己坑了,我理解成包括四边。。).题解:用sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+e[i][j].记录(0,0)(0,j)(i,0)(i,j)的矩阵,这样所有的矩

2013-10-07 14:37:10 1257

原创 hdu 2476 String painter 动态规划

题意:给定两个字符串a和b,求最少需要对a进行多少次操作,才能将a变成b。每次操作时将a中任意一段变成任意一个字母所组成的段。题解:动态规划题。dp[i][j]表示a中i到j段变成b需要的最少次数。递推公式:dp[i][j]=min(dp[i][k]+dp[k+1][j])(i注意:由于如果一段子串两端相等,会成端更新,从而改变中间子串的字符,所以处理时可假定所以a中单个字符都需要一次变化

2013-10-07 13:10:42 4120 3

原创 zoj 2625 Rearrange Them 动态规划

题意:给定一个序列长n,序列由1~n组成,问有多少种组合方式使得序列中的任意一个数i的前面数不是i-1?题解:动态规划题,只要推出公式,其他一切OK。令F[i]表示长度为i的符合序列个数。则对于已知的f[0]~f[i-1],我们来推f[i]。因为f[i-1]表示长度i-1符合序列个数。则加入新的元素i,那么i处列i-1后面外,其余全部可以放,共i-1个位置。除了这种从符合条件推符合条件外,还可

2013-10-06 15:26:35 981

原创 poj 3604 Professor Ben 因子

题意:输入一个数n,它的因子为ai,对于每个ai,bi表示ai的因子数。现在求的是∑bi^3。题解:对于一个数n,可以分解质因数,得到n=p1^t1*p2^t2...*pk^tk(pi为素数)。则因子就是第pi的指数,取(0~ti)中的一个数,共(1+t1)*(1+t2)*...*(1+tk)个因子。对于其中一个因子m=p1^c1*...*pk^ck,则bm=(c1+1)^3*...*(ck+

2013-10-05 15:48:41 759

转载 hdu 4099 Revenge of Fibonacci 大数加法+字典树

自己很久都没写过字典树了,直接转了别人的代码,嘿嘿。。题意:输入一个数n,长度至多40,输入最小序号i,使得f[i]的前缀是n,若i大于1e5则输出-1。f[i]表示第i个斐波那契数列,f[0]=f[1]=1,f[i]=f[i-1]+f[i-2];题解:可以说是一道字典树模板题。就是用大数加法预处理小于100000的斐波那契数列,将小于40的前缀保存在字典树中。然后每次询问只要在字典树种找

2013-10-05 14:44:08 1185

原创 hdu 4091 Zombie’s Treasure Chest 贪心+枚举

题意:输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝石数目无限,问背包里能放下的最大价值?题解:看过去很像完全背包,可数据很大(虽然没给出,也能猜到,不然太水了),所以不能用背包求。又只有两种物品,想到了贪心,将价值与体积比大(称为价值比)的优先放入。但体积限制,这样还不可以,还需要枚举减少价值比大的宝石个数,是否可以增大所求价值。又我们可以知道对于体积是m=l

2013-10-05 13:11:20 1936

原创 hdu 4455 Substrings 动态规划

题意:给定一个序列ai,个数为n。再给出一系列w;对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数题解:一道动态规划体。。一开始i想成了树状数组。dp[i表示w=i时所求的答案。dp[1]=n,这个很容易知道,dp[2]中的子串就是删去dp[1]中最后一个子串,再每个子串加上其之后的那个数,以此类推。。要删去的最后一个子串的权值很好求,for以遍

2013-10-04 16:57:52 1605

原创 hdu 4462 Scaring the Birds 状态压缩

题意:一个n*n的区域,有m个位置是可以放稻草人的,其余都是玉米。对于每个位置(x,y)所放稻草人都有个作用范围ri,即abs(x-i)+abs(y-j)题解:可放稻草人位置个数m注意:对于每种情况,如果用光搜,由于没有结束判断,所以要遍历所有的作用范围内的点。以最坏情况记,每种情况都要遍历n^2*k(k为情况中要放稻草人的位置数)次。这种复杂度有点高,至于会不会爆,就没试过了。。而枚举所

2013-10-04 13:39:45 1158

原创 hdu 4104 Discount 01背包变形+优化

题意:就是输入一个商品数n和所有商品的价格,问最小不能组合的价格是多少?题解:我直接想到的是01背包。。,直接来肯定要TLE的,需要优化下,别人不知道是用什么方法,我自己是用这个接的,就是不知道最坏情况能不能过了。。没计算过这题中说是01背包变形,其实就是个dp,以已知可以拼凑的价格推出另一个价格,写法跟01背包很想,尤其是两个for。可以理解成将n个体积为价格值,价值为0的物品,放入没有

2013-10-03 17:02:32 1120

原创 poj 2115 C Looooops 拓展欧几里德定理

题意:求x,使得(a+c*x)%2^k=b;题解:令n=2^k,则变换等式:c*x%n=b-a;再令b=b-a,a=c;就变成了a*x%n=b,一开始脑袋竟然混乱,将a*x想成了a^x,汗死。。。先介绍下拓展欧几里德定理:已知a和b,可以用拓展欧几里德定理求得一对整数(x,y),使得ax+by=gcd(a,b);接着讲解法:用拓展欧几里德定理求得ax+ny=d,d=gcd(a,b);两

2013-10-02 16:19:29 840

原创 poj 3358 Period of an Infinite Binary Expansion 欧拉定理

题意:将一个小于1的小数表示成二进制形式。输出二进制形式下,小数部分第几开始循环,循环节长度是多少?题解:先约分,这个就不用解释了吧。接着,转换成二进制的时候,每次乘2,然后留下整数部分,以此循环。因而当分母是2的倍数的时候,必定不在循环节内,因为之后同乘以2的话会将分母约去一部分,也就不可能构成循环了。同理,当分母不是2的倍数的时候必定构成循环:令a/b,a和b没有公约数且b为不是2

2013-10-02 15:16:08 871

原创 poj 1845 Sumdiv 数论--等比数列和(逆元或者递归)

逆元求分数取模代码:#include #include #include #include using namespace std;const int mod=9901;int pow_mod(int a,int b,int n){ a=a%n; int s=1; while(b) { if(b&1) s=(s*a)%n; a=(a*a)%n; b=

2013-10-02 12:10:14 3069 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除