随笔分类 -  数论&数学

摘要:数学,规律,构造类问题题意,就是以任意一个点为中心,交换它左右两个点的位置。一开始想这题,有个地方错了,所以一直想不到,就是把所有黑子当成一样的,白子当成一样,这样想也不是说错,但是这样想会限制了思维然后换一种思维,给所有棋子按1到n编号,就算颜色相同,编号也不同,是不同的棋子。然后我们看看交换的时候会发生什么事情以点a为中心,那么a-1和a+1发生交换,那么也就是说,编号a-1的点去了a+1的位置,如果继续交换的话,它还可以去到a+3,a+5……的位置,这里有一个突破点就是,它所在的位置的奇偶性不行,如果它一开始就在奇数的位置,无论怎么交换它还是在奇数位置,偶数亦然。但!不要这么轻易下结论, 阅读全文
posted @ 2013-06-12 20:11 Titanium 阅读(594) 评论(0) 推荐(0)
摘要:http://codeforces.com/contest/305/problem/B数学,模拟题意:略这题,可以按照后面Hint那样逆回来模拟,但是long long会溢出,case 40#中的溢出,让人没了脾气,刚好溢出又刚好能输出YES,所以就正着模拟,可以避开溢出问题,但是要注意一点为了叙述,我们就举n=2的例子对于等式可以写成 a1 + (1/x) = p/q , 如果它们相等,那么我们先算出 p / q的整数部分 Int = p / q (计算机做除法自动取整)若Int < a1 , 那么这个等式是不可能相等的,一定是左边大若Int > a1 + 1 , 那么这个等式是 阅读全文
posted @ 2013-06-09 23:14 Titanium 阅读(466) 评论(0) 推荐(0)
摘要:二分, 数学用分段的思想解决定义3个数组len[i]表示i这个数字有多少位,len[1-9] = 1,因为个位数只有1为,len[10-99] = 2,有两位………………num[i]表示1到i,一共占了几位,num[9]=9,因为123456789,num[10] = 11, 12345678910sum[i] = num[1]+num[2]…………num[i]sum[4] = 10 , 因为1121231234所以对于一个位置n,用分段的思想,不断缩小范围先找到sum[m] <= n && n < sum[m+1]然后求出差值 delta = n - sum[m] 阅读全文
posted @ 2013-06-06 11:39 Titanium 阅读(376) 评论(0) 推荐(0)
摘要:概率题题意:输入case数,每组case两个数字,表示A的点数和B的点数,他们玩游戏,每个人赢的概率都是0.5。输的人要将自己的一部分点数给对方,给的点数是min(na,nb)。例如na=3,nb=2如果A赢了,B要给2点给A,即全部给完。如果B赢了,A要给2点给B,A变为1,B变为4。一个人的点数为0,那么游戏结束了。题目要你输出两个数学期望,第一个是,这个游戏要结束,要玩多少局的数学期望,另一个是A赢的概率这题一开始看觉得是期望DP,后来想想也可以不写DP,能把状态表达出来即可。设一个状态(n,m,c)表示A现在的点数是n,B的点数是m,已经玩了c局。那么游戏结束的状态就是(n,0,c)或 阅读全文
posted @ 2013-04-25 22:59 Titanium 阅读(402) 评论(0) 推荐(0)
摘要:找规律约瑟夫环问题变形。在这个约瑟夫环问题中,固定每次间隔两人,10个人,杀人顺序为2,4,6,8,10,3,7,1,9,最后剩下5定义一种运算J^m(n) 表示 m次嵌套 J( J( J(n) )好像J^2(10) = J(J(10)) = J(5) = 3而m和n的最大值是 10^9这个问题 主要是能快速算出 J(n),不难想到如果能算出J(n),可以暴力地一步一步迭代下去做m次,容容易发现不用做m次,因为J(1) = 1,当n降到1的时候,m再大都没意义了可以发现这个问题是指数递减的,m<=10^9 是个纸老虎同样地可以打表看看J(n)的值,一看就能看到规律对于一个范围的n , [ 阅读全文
posted @ 2013-04-22 00:00 Titanium 阅读(206) 评论(0) 推荐(0)
摘要:数论+打表A的所有因子和位B,B的所有的因子和为A,则称{A,B}是一对ooxx number输入数字n,求出[1,n]里面有多少对ooxx number,其中(A,B),(B,A)这样算作一对n最大为5百万(50000000)hits 220= (1+2+4+71+142) <--- 284,284= (1+2+4+5+10+11+20+22+44+55+110) <--- 220。220 and 280 is a pair of ooxx numberssample input3001300sample output12定义sum[i]=i的因子和,用筛法来构建i枚举因子i.. 阅读全文
posted @ 2013-04-21 23:47 Titanium 阅读(427) 评论(0) 推荐(0)
摘要:找规律题同样是训练的题目题目:给出n,得到一个n*n的方阵,n保证为奇数,从第1行最中间的位置开始填1,然后以某种规则一直填数,每次填2,3,4,5……直到n*n。填充规则是每次把下一个数填在现在位置的右上方(即上移一格再右移一格),如果另外把这个方阵看做一个环,如果现在位于第一行,上移一格其实移到了最底那行,如果现在位于最右边那列,右移一格就是移到了最左边那列,同样的,如果刚好位于右上角,移动后就在左下角了;另一部分,在移动到右上方的时候,如果右上方已经被填充了,那么就不能向右上移动,而是向下移动,然后再继续向右上移动,画个图便知最后要求,右下角那个位置填的数字时多少这题的规律还是不难找到答 阅读全文
posted @ 2013-04-13 18:22 Titanium 阅读(277) 评论(0) 推荐(1)
摘要:找规律题?YY题?题意:给出一条线的长度L(直线在[0,L]),和蚂蚁数,下面m个数字表示m个蚂蚁的起始位置(整数,坐标),所有蚂蚁向哪边走不确定,但是两个蚂蚁相撞会掉头走。蚂蚁的速度1cm/s,蚂蚁没有长度是一个点,另外蚂蚁走到直线的两个尽头就会掉下去。问怎么走,所有蚂蚁最快掉下去,输出时间(所有蚂蚁都掉下去后再输出时间而不是第一个掉下去就输出),然后怎么走最晚掉下去,输出所有蚂蚁都掉下去的时间这题真想不到什么算法,不过可以确定一些基本的策略1.最快掉下去:以中点为轴,位于两端的蚂蚁都向两端走,这样他们不会发生任何的碰头,直接全部掉下去,那么最后掉下去的蚂蚁,是离中点最近的蚂蚁,它是最后掉下 阅读全文
posted @ 2013-04-12 11:50 Titanium 阅读(764) 评论(0) 推荐(0)
摘要:推荐技术公众号:不爱睡觉的大猪 容斥原理 题意:给n*m的矩阵有点,左下角的点为(1,1),右上角的点(n,m),(其实转回来也是没影响的即m*n),一个人站在(0,0)看这些点,在一条直线的视线上,它只能看到最前面的那个点,后面的点将会被档住他看不到,问你,这个人一共能看到多少个点。 这个问题只要 阅读全文
posted @ 2013-03-18 15:22 Titanium 阅读(1444) 评论(5) 推荐(0)
摘要:递推,卡特兰数题意:输入n,表示圆上有n对点也就是2n个点,每个点要与另一个点且只能与一个点相连,用直线将两点相连,那么会产生n条线,但要求这n条线不能出现相交的情况,问有多少种连接方案这个问题并不难,首先我们固定一个点,让它与另外的任意一个点连接,那么这个圆将被分成两份,我们暂且把这条线称为分界线,而两边各有一些点。我们可以很容易的发现,如果一边的点的个数为奇数,那么这一边无论怎么连,都必将剩下一个点没有被连接,这个点一定要越过分界线,也就是一个会出现相交。由于一边是奇数个点,另一边也肯定是奇数个点,会出现相同的情况所以我们得到一个策略,分界线不能随便选,它一定要保证两边的点的个数均是偶数。 阅读全文
posted @ 2013-02-23 16:25 Titanium 阅读(1542) 评论(0) 推荐(0)
摘要:递推/*递推我们要怎么得到n呢,可以考虑n-1的情况,在n-1的情况下我们只需要再放一个2*1的方块即可接着可以考虑n-2的情况,我们可以放入一个2*2的方块即可,或者放入2个2*1的方块接着我们可以考虑n-3的情况,可以放入3个2*1,或者1个2*2和1个2*1,或者1个2*1和1个2*2然后会发现,这样子就重复,n-3的这些情况其实就是n-1和n-2加起来的情况所以可以n只决定于n-1和n-2,易知递推公式为dp[n]=dp[n-1]+2*dp[n-2]*/#include <cstdio>#include <cstring>#define LEN 1010#def 阅读全文
posted @ 2013-02-23 12:51 Titanium 阅读(340) 评论(0) 推荐(0)
摘要:递推题意:看题目中的列子就可以知道 ,当n为5时,可行的子集有{1,3,5},{2,4},{2,5},{1,4}1.子集中任意两个元素的差x要2<=x<=3。2.子集要尽可能的长,好像1,3,5,不能是1,3,因为还能加上5然后就是一个很简单的递推,按位递推即可,dp[i]表示用前i个数字能产生多少个子集(并且该子集中包含了第i个元素),那么对于dp[i]来说,决定它的是dp[i-2]和dp[i-3],有第i个元素的子集必定有第i-2个元素或第i-3个元素至于用递推或者记忆化搜索来写都是没问题的#include <cstdio>#include <cstring& 阅读全文
posted @ 2013-02-19 11:21 Titanium 阅读(408) 评论(1) 推荐(0)
摘要:递推参考:http://hi.baidu.com/gbr12345/item/b1686d3e4d2c5584b611db64题意:输入n要拼成一个3*n的矩形,现有无限的2*1的小矩形可以提供,能有多少种不同的拼凑方案这题一看就觉得是组合数字或者是递推,看了几下确定递推更好做。然后想了下怎么递推。1.就按照n从小到大来推,但是找不出什么规律。2.按照面积来递推,先凑出面积为2的,再面积为4,为6……然后对于3*n的面积是多少就直接输出即可,这种思想感觉非常接近了但是还是不行,因为处理不了重复的情况最后无奈看了解题报告,不过还是不知道原作者怎么想到的这个递推公式#include <cst 阅读全文
posted @ 2013-02-18 17:42 Titanium 阅读(242) 评论(0) 推荐(0)
摘要:递推题意:给出n和k,用k个数字(可以相同)使他们的和为n,问有多少种方案数,其中好像a+b,b+a这种算为两种方案,也就是考虑排列这个问题用递推来做,按位递推。dp[c][s]表示在利用c个数字的条件下相加得s的方案数dp[c][s]=dp[c-1][s]+dp[c-1][s-1]+dp[c-1][s-2]……dp[c-1][0]另外需要初始化无论多少位,相加和位0的话方案数是1,即全部为0,所以dp[c][0]=1另外当只有一个数字时要相加和为s,方案数也是1,即只能填s本身,dp[1][s]=1然后就可以开始递推了我是用记忆化搜索来写的#include <cstdio>#in 阅读全文
posted @ 2013-02-17 22:13 Titanium 阅读(244) 评论(0) 推荐(0)
摘要:递推题意:给出n和k,可用的数字为0,1,2……k,一共有n位数字,现在要求得到一种排列,相邻两个数字相差不超过1,问这种排列的个数占全排列总数的比列要得到全排列的个数就是(k+1)^n , 要得到这个特殊的排列个数用递推即可dp[j][i]=dp[j-1][i-1]+dp[j][i-1]+dp[j+1][i-1];dp[j][i]的意义为第i位数字填j有多少种可能,那么第i位填了j,第i-1必定只可能填j-1,j,j+1才能保证相邻两位差不超过1但主要j=0和j=k的情况另外dp数值要用double#include <cstdio>#include <cstring> 阅读全文
posted @ 2013-02-17 21:21 Titanium 阅读(950) 评论(0) 推荐(0)
摘要:题意:题目只有一个case,有16个球队,给出名字,并且下面一个16*16的矩阵,p[i][j]是一个二位的整数,表示i球队打败j球队的概率,p[i][j]+p[j][i]=100,下面16行输出球队名字并且后面一个百分率是该球队获得总冠军的概率DP递推或者记忆化搜索都可以设dp[i][left][right]表示i这个球队在第left到第right球队里面得到冠军的概率,所以最后需要的是dp[i][1][16]。一个球队要在当面的阶段得到冠军必须在之前得到冠军所以mid=(left+right)/2; i和j在[left,right]里面争夺冠军(例如i和j在1到16里面争夺冠军,也就是争夺 阅读全文
posted @ 2013-02-08 22:15 Titanium 阅读(359) 评论(0) 推荐(0)
摘要:概率题给你p和q,表示概率p/q,当有n个红袜子,m个黑袜子时,取两次,两次都是红袜子的概率为p/q,输出n和m,如果不可能则输出impossible设总袜子数为b,红袜子数为a,则a/b*(a-1)/(b-1)=p/q , 可见分子p是a*(a-1)的形式,分母q也是这种形式所以我们用暴力来枚举i*(i-1)分母,并且当分子也能写成j*(j+1)的形式时就找到了解其实这题意义不大也不是什么经典题,能AC也就行了不必太抠#include <cstdio>#include <cmath>long long gcd(long long a , long long b){ r 阅读全文
posted @ 2013-02-07 23:51 Titanium 阅读(381) 评论(0) 推荐(0)
摘要:数学递推(考查矩阵二分快速幂取模)参考:http://www.cnblogs.com/staginner/archive/2011/12/14/2288187.html输入n和M,简单来说就是要求f(n)%M,而f(n)=2*F(n)-1,F(n)为第n项费波那列数,所以问题转化为求F(n),由于n非常大n (0 <= n < 263-1)所以线性递推会超时,要用矩阵快速幂的方法初始化[F0,F1]=[0,1] , 要求[Fn,Fn+1][F0,F1] * |0 1| (n) = [Fn,Fn+1] (不考虑高精度) |1 1|用二分的方法求解|0 1| (n) ... 阅读全文
posted @ 2013-02-07 14:02 Titanium 阅读(382) 评论(0) 推荐(0)
摘要:组合数学,递推(Catalan number , 卡特兰数)题目:给n个数字,能构建成多少种二叉排序树。这个问题并不难,用递归的思想就能解决。当空树即n=0时方案数为1,当n=1时方案数同样为1。当n>=2时,我们把n个数按升序排列,如果我们选ai作为数树根,那么a1……ai-1必定在有子树,ai+1……an必定在左子树,左子树有i-1个元素,同样是排序二叉树,相当于问这个i-1个元素又能组成多少个二叉排序树,右子树有n-i个元素,同时是二叉排序树,相当于问这n-i个元素能组成多少个二叉排序树,方案数为两者相乘。对于每个ai作为树根的计算方法如上,而所有的ai都能作为树根,所以不能总结出 阅读全文
posted @ 2013-02-06 23:54 Titanium 阅读(561) 评论(1) 推荐(0)
摘要://概率题//先求出每一次中,抽到两个红球的概率为pi,qi=1-pi,表示每一次中不是抽到两个红球的概率//pi=(1/i)*(1/(i+1))=1/(i*i+i)//题目要求所有抽取中,至少有一次抽到两个红球的概率//我们算出所有抽取中,每次都没有抽到两个红球的概率Q=(q1*q2*q3……qn),则1-Q为所求答案//另外要求出,每一次都抽到两个红球的概率,即P=(p1*p2*p3……pn)//但P这个数值必定非常小,所以题目只需要输出P小数点后有多少个连续的0//我们来分析P这个数字,令P=10^a,易知a是个负数,令a=i+d,i为整数部分,d为小时部分//则P=10^i*10^d, 阅读全文
posted @ 2013-02-06 19:57 Titanium 阅读(458) 评论(0) 推荐(0)