一天一道算法题--6.5--数学题
2014-06-06 15:54
162 查看
感谢 微信平台: 一天一道算法题 ---每天多一点进步----
话说 这题 我百度了一下 没找到哪个OJ 有出这题
下次 来给我们的学弟学妹们把....
那我来说下题目大意:
给你一个n 问你从1,2,3……n中选出3个数 能够构成多少种不同的三角形 比如N=5 可以有(2,3,4)(2,3,5)(3,4,5)三种
输入:(3<=n<=n1000000)
输出:种类数
首先 既然是做acm 那么 一般暴力 都直接放弃吧 这里也需要O(n^3) GG
这里 微信提供的分析 很好 我相信 你慢慢理解 下肯定能看懂 那我就先将它藏起来 =你卡住的时候 see it
View Code
好 web实验报告写完 一道题写完 还欠2道
话说 这题 我百度了一下 没找到哪个OJ 有出这题
下次 来给我们的学弟学妹们把....
那我来说下题目大意:
给你一个n 问你从1,2,3……n中选出3个数 能够构成多少种不同的三角形 比如N=5 可以有(2,3,4)(2,3,5)(3,4,5)三种
输入:(3<=n<=n1000000)
输出:种类数
首先 既然是做acm 那么 一般暴力 都直接放弃吧 这里也需要O(n^3) GG
这里 微信提供的分析 很好 我相信 你慢慢理解 下肯定能看懂 那我就先将它藏起来 =你卡住的时候 see it
/* 设三角形三条边长分别为X Y Z 最大边长为X的三角形有cnt(x)个 那么下面这个不等式就是成立的 y+z>x 所以可以推出y 或 z的取值范围 我这边 就求z的范围了 x-y < z < x 然后 就是很关键的一步了 你这里能想到就OK了 对于z来说 当y=1的时候 是无解的:因为z<x 那么z+1<=x 当y=2的时候 有一个解:因为x至少比z大 一 那么z+2 就可以大于z 当y=3 4 ..x-1 = x-2 个解 :同理 并且 因为 我描述不来。。 但这不是cnt(x)的正解 因为上面的情况包括了 y == z的情况 并且每个三角形遍历了两次( 就是重复计算了 以x/2为界 重复计算了 因为 三角形的时候 y=3 z=4 与y=4 z=3是一样的) 至于 y==z 的情况 就是出现在 x/2+1 -- x-1 那么 共 x-1-x/2-1+1 = (x-1)/2个 ( 因为 题目要求 边长 都不相等 所以就不能有 y=z=3 这种情况出现 ) 最后 我们就得到了 式子 cnt(x) = ( (x-1)*(x-2)/2 - (x-1)/2 )/2 ; */
View Code
好 web实验报告写完 一道题写完 还欠2道
相关文章推荐
- 一天一道算法题---6.8--数学题
- 一天一道算法题---6.20--数学题
- 一天一道算法题--6.9--数学题
- 一天一道算法题--5.29---动态规划之数塔
- 一天一道算法题(持续更新)
- 一天一道算法题---6.6---排列递推(我不会)
- 一天一道算法题--6.10--变量交换
- 一天一道算法题---6.3---二分运用
- 一天一道算法题---6.4--中途相遇法
- 一天一道算法题--6.7--stack
- 《github一天一道算法题》:快速排序和随机快速排序
- 一天一道算法题——数对数目分析
- 《github一天一道算法题》:插入排序
- 一天一道算法题---5.26---思维锻炼
- 一天一道算法题—2015-10-15
- 一天一道算法题--6.19--二分搜索
- 一天一道算法题---6.11---大数阶乘
- 一天一道算法题--6.13---计算几何
- 一天一道算法题--6.15--卡特兰数
- 一道简单的算法问题--数学的魅力