上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 29 下一页
摘要: 题目大意: 求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 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给你一个数的大小为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 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一个人从原点射箭,求要射中(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 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一个圆台型的杯子,告诉你杯子的水的体积,要求水的高度。解题思路: 将水的高度作为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 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给你一个直角三角形的一条直角边的平方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 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求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 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 转载请注明出处:優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 阅读(574) 评论(0) 推荐(0) 编辑
摘要: /**State: 2256 0MS 260K 2351 B C++*题目大意:* 求(sqrt(2) + sqrt(3))^2n取下界之后mod1024* (1 <= n <= 10^9)。*解题思路:* 看到了n那么大,肯定是二分求幂,但是精度是个* 问题。可以(sqrt(2) + sqrt(3))^2n = (5 + 2sqrt(6))^n* 然后令5+2sqrt(6)^n = an + bn * sqrt(6)* = (5 + 2sqrt(6... 阅读全文
posted @ 2012-08-03 01:34 cchun 阅读(176) 评论(0) 推荐(0) 编辑
摘要: /**State: 1729 0MS 268K 726 B C++*题目大意:* (取石子游戏)有n个箱子,体积为Si,当前箱子里的石子数为Ci。* 两个人轮流往箱子里放石子,而且每一次放是数量都有限制,不能* 超过当前箱子内石子数的平方。例如箱子里有3颗石子,那么下一个* 人就可以放1~9颗石子,直到箱子被装满。当有一方放不下石子时游* 戏结束,最后放不下石子的人输。*解题思路:* 一开始我的想法就是正确的,求sg值,sg值也能用笔模拟出来,但* 关键的一步是箱子... 阅读全文
posted @ 2012-08-02 22:21 cchun 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 这道题真好,体现了思想的灵活性。要3个连续状态以上嘛,好,那我就求出只有1~2个状态的数量,最后总数减去即可。美妙,完结。/**State: 3519 0MS 256K 2354 B *题目大意:* 给定n个硬币,硬币有两种状态0或1,可以翻转,总共有2^n种* 状态,规定如果有连续3个硬币的状态一样,即是特殊串。要求* 特殊串的个数。*解题思路:* 已知总数目,那么可以用相反的思想求出该串状态不含有3个* 连续一样的数目,然后用总数去减。* 长度为 n 的 01 串一共有 2^n... 阅读全文
posted @ 2012-08-02 10:54 cchun 阅读(238) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 29 下一页