UVA&&NYoj Triangle Counting
来源:互联网 发布:域名和网址的区别 编辑:程序博客网 时间:2024/06/06 01:40
题目链接:点击打开链接
题目的意思很是容易,就是,给你长度为1,2,3,4,5,6.....n的木棍,选取其中的任意三根木棍,看最多能组成几个不相同的三角形。
思路:
设f(x)为以x为最长边的三角形,最多有f(x)个不同的三角形。
在设另外的两条边为y,z。那么z的取值范围就是(x-y,x)。
当y=1,z的取值为0个。
当y=2,z的取值为1个。
...
当y=x-1,z的取值为x-2个。
比如x=7的时候,符合是三条边为:
y=2:267
y=3:357 367
y=4:447 457 467
y=5:537 547 557 567
y=6:627 637647 657 667
y=7不符合。
我们可以看到,只要把y=z的去掉,剩下里面的有一对一对相对应的,所以/2就是f(x)的answer。
这样的话,我们可以,得到。
一个递推式:answer(x)=answer(x-1)+f(x)。
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define LL long longconst LL N=1000003;LL ans[N];int main(){ ans[1]=0;ans[2]=0;ans[3]=0; for(LL i=4;i<=N-3;i++) ans[i]=ans[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2; LL n; while(scanf("%lld",&n)&&n>=1){ printf("%lld\n",ans[n]); } return 0;}
在概率论课上,我们学过,如果一个事件的概率不是很好求解的话,那么,如过其对立事件比较容易求解的话,我们可以求他的对立事件。然后求解需要求解的问题的解。
这不仅仅在概率上是可行的,在许多问题上都是可以这样求解的。
那么我们用求其钱堆里事件来分析一下,这个问题:
分析:(转载)
如果单纯统计合法的三角形,好像不大好办。但如果去统计不合法的,还算好办一些,因为不合法的三角形就相当于找到任意两条边a、b,并且另外一条边c要满足c>=a+b,那么以a、b为边的不合法的三角形一共就有N-(a+b)+1种(这里假设a+b<=N),当然我们不能直接枚举a、b去计算。但观察到实际上a+b的范围是有限的,3到2*N-1而已,那么不妨考虑如果和为i的时候一共有多少对不同的a、b呢?比较容易发现是有(i-1)/2对的,那么最后不合法的三角形数量就变成了sum{(i-1)/2*(N-i+1)}(3<=i<=N)。但是由于数据的原因,O(N)的办法是过不了的,不过我们能够将上面的表达式化简成能O(1)计算的形式。
- UVA&&NYoj Triangle Counting
- UVA 11401 Triangle Counting
- UVA 10973 - Triangle Counting
- Uva 11401 - Triangle Counting
- UVA 11401 Triangle Counting
- UVA 11401 - Triangle Counting
- UVA 11401 - Triangle Counting
- uva 11401 - Triangle Counting
- UVA - 11401 Triangle Counting
- UVA 11401 Triangle Counting
- UVA - 11401 Triangle Counting
- uva 11401 Triangle Counting
- Triangle Counting+uva+数学题
- UVa 11401 Triangle Counting
- uva 11401 Triangle Counting
- UVa 11401 - Triangle Counting
- UVA 11401Triangle Counting
- UVA 11401:Triangle Counting
- 凸多边形的动态规划问题
- Hibernate: select hibernate_sequence.nextval from dual
- OFBIZ分享:禁止页面输出注释信息
- Xcode代码格式化
- gnuStep 开发环境on Windows
- UVA&&NYoj Triangle Counting
- 初创公司的创始人该拿多少薪水?
- 基于MTD的NANDFLASH设备驱动底层实现原理分析(二)
- Windows下连接调试Asus Nexus 7 Tablet
- VS2013 添加依赖项目
- 残酷的墨菲定律
- 键值存储
- 数据库连接2
- eclipse3.7中文字体很小,如何改大