HDU 4259 Double Dealing 数学题
摘要:/**State: HDU4259 7796MS 3520K 1468 B C++*题目大意:* 一副牌有n张,有k个人,轮流发牌,最后把每个人的牌按照小号在上,大号在下* 的顺序叠放起来,求最少次数使牌恢复原样。*解题思路:* 发现每一张牌都有出现的周期,要恢复原状,只要求出每张牌出现的周期的最小* 公倍数即可。*解题感想;* 用了STL里面的栈,结果20000ms都TLE了。可能是本题数据量太大,不过以后要慎用。* 贡献了4~5个wa,查了好久好久,原来是这里虽然是_int64,但没...
阅读全文
posted @
2012-08-26 19:11
cchun
阅读(296)
推荐(0)
HDU1568_求fibonacci的前四位
摘要:题目大意: 求fibonacci数列的前面四位,注意f[0] = 0;解题思路: 凡是要求数的前面几位的,都可以用两边求对数的思想。让我想起了,m = n^n.要求n的前面一位。这个时候用对数,lg(m) = n*lg(n), m = pow(10, n*lg(n)),之后求n*lg(n)的小数部分,因为整数部分为10^P(p代表整数),全都为10000……,而小数部分则为10^B(B代表小数部分),所以要取几位,就去小数那里取即可。 这是网络上摘来的,写得very good: 先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c); 假设给
阅读全文
posted @
2012-08-03 02:13
cchun
阅读(189)
推荐(0)
HDU1018_求数的阶乘位数
摘要:题目大意: 给你一个数的大小为n, 1 ≤ n ≤ 10^7,求它的阶乘的位数。解题思路: 暴力是不可能了,数能够达到10^7,暴力出来的数,数组都放不下。 其实有一个公式叫斯特林公式, result=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1); 其中,该公式不适用于n=1的情况,所以n=1时要另外考虑。代码:#include<iostream>#include<cmath>using namespace std;int main(void){ int cas; scanf(
阅读全文
posted @
2012-08-03 02:12
cchun
阅读(190)
推荐(0)
HDU2298_物理题
摘要:题目大意: 一个人从原点射箭,求要射中(x,y)的那个物体的箭射出前与x轴的角度。(用弧度表示)解题思路: 用公式的方法, x = v * t * cos(a); -> t = x/v/cos(a); y = v*sin(a)*t - 1/2*g*t*t; 将一式中的t代入y中,变形得到: g*x*x*tan^2(a) - 2*v*v*x + g*x*x + 2*v*v*y = 0; 然后用求根公式求解,题目要求求最小的那个角度,所以等于 atan((-b-sqrt(temp))/2.0/a),有两种情况要考虑,1、方程无解输出-1。2、目标处于y轴的时候输出pi/2,或者目标在x轴上,
阅读全文
posted @
2012-08-03 02:11
cchun
阅读(164)
推荐(0)
HDU2289_Cup_二分求圆台体积
摘要:题目大意: 一个圆台型的杯子,告诉你杯子的水的体积,要求水的高度。解题思路: 将水的高度作为x,然后化简出f(x)方程,二分求x,至于圆台的体积公式:v = pi * h * (R*R+R*r+r*r) / 3; 水的高度根据直角梯形的面积公式即可求解。代码:/**圆台体积公式:v = pi * h * (R*R+R*r+r*r) / 3;*水的体积: v = pi * sqrt(r*q) * (r*R + sqrt(r*R)*r+r*r) / 3;*/#include<iostream>#include<cmath>using namespace std;const
阅读全文
posted @
2012-08-03 02:11
cchun
阅读(212)
推荐(0)
HDU1465_递推_错排
摘要:题目大意: 求n个人的错排数量。解题思路: 错排公式:f[i] = (i-1)*(f[i-1] + f[i-2]);代码:#include<iostream>using namespace std;int main(void){ __int64 f[21]; f[1] = 0; f[2] = 1; for(int i = 3; i < 21; i++) f[i] = (i - 1) * (f[i-1] + f[i-2]); int n; while(scanf("%d", &n) == 1) { cout << f[n] <<
阅读全文
posted @
2012-08-03 02:10
cchun
阅读(109)
推荐(0)
HDU4206_Treasure Map_数学转换题_有技巧地暴力枚举
摘要:题目大意: 给你一个直角三角形的一条直角边的平方n,这条边可能是直角边,然后要求求出另外一条直角边,还有求出斜边的长度,要求另外一条直角边跟斜边都是整数。1 <= n <= 10^9.解题思路: 给出的直角边异常巨大,而且另外两条边的长度根本没有上限。但是可以转换。z^2 - y^2 = n,那么有(z + y)*(z - y) = n,变成了a * b = n,由于z跟y都是整数,那么a跟b都是整数,并且a跟b都肯定大于0,是自然数,因为z必定大于y。所以枚举出所有a跟b,然后z + y = a, z - y = b,由这两个公式求出z跟y即可。解题感想: 比赛的时候稍微想到了转
阅读全文
posted @
2012-08-03 02:10
cchun
阅读(177)
推荐(0)
POJ1942-Paths on a Grid_组合数学_处理aCb
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1301543725大致题意:给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走解题思路:非常水的中学数学题,用组合做先简单建立一个数学模型:只要给定了长m和高n,那么要从左下角走到右上角,不管怎么走,一定要往右走m次,往上走n次例如给定 m=5,n=4那么可以 上上上上上右右右右又可以 上右上右上右上右上等等。。。关键是“上”和“右”的先后问题,就是组合问题了那么数学模型就是从n+
阅读全文
posted @
2012-08-03 02:09
cchun
阅读(588)
推荐(0)
HDU2277_变色球
摘要:/**题目大意:* 给定a, b, c,代表三种不同颜色的球的个数,然后规定* 如果把任意两种不同颜色的球放在一起,那么它们两个* 的颜色将变成第三种颜色的球的颜色。求判断最后所有的* 球能否变成同一种颜色,如果能,输出最小步数。否则输* 出):。*解题思路:* 广搜实现不了,因为a,b,c都是<=1000,标志状态的数组太* 大。其实就是找规律。其实a, b, c由a-x,b-x,c+2x可得到只* 要三种球的个数其中任意两种球个数只差是3的倍数,即可* 变成同一种颜色。*解题感想:* wa了2次,第一次忽略了,其实只要有两种满足三的倍数,* 那么即使另外一种球的个数小...
阅读全文
posted @
2012-05-26 15:16
cchun
阅读(261)
推荐(0)