UVa 11401 - Triangle Countin
来源:互联网 发布:儿童故事大全软件 编辑:程序博客网 时间:2024/04/28 18:27
【题意】给了n根木棍,木棍的长度是1-n,问有多少种方式可以组成合法的三角形,n的上限可以到1000000。
【解题思路】当然,这题是数学题,当然要想办法找规律了。我自己推了很久,都没发现,自己太弱啦,只能看网上的解法了。
【他人的思路】
组合数学,计数原理。本题可以正向求解也可以反向求补集,这里采用正向求解。
1.首先写出前几组数据,找规律:{ 里面的括号是子情况 }
(4,3,(2))
(5,4,(3,2))
(6,5,(4,3,2))(6,4,(3))
(7,6,(5,4,3,2))(7,5,(4,3))
(8,7,(6,5,4,3,2))(8,6,(5,4,3))(8,5,(4))
对于上述的数据采用记号[a,b,c,...] 记录对应每种的子情况数,则转化如下:
[1]
[2]
[3,1]
[4,2]
[5,3,1]
观察发现,每组中对应的子情况数依次递增1,每当最后的一组变为3时,后面就出现新的组;
这是因为n的奇偶性不同产生的影响,当最长的边为l时,对应存在的解应该如下:
(l,l-1,(2))(l,l-2,(3,2)),... ,(l,l-k,(k,..,2))
无论l的奇偶性,k均取值l/2(这里是整除),因此解的个数与奇偶性相关的;
2.然后观察计算
解的个数为:n-3 + n-5 + .. + r;{ n为奇数r为2,n为偶数r为1 }
分就两种情况求通向公式有:
f(n)=(n^2 + 4n +4)/ 4 { n为偶数 };f(n)= (n^2 + 4n +3)/ 4 { n为奇数 };
因为写成程序时是整除运算,所以这里都是用偶数的通项公式没有影响;
因此有:f(n)= (n^2 + 4n +4)/ 4,为最长边为n时的解的个数,求和输出即可。
说明:注意使用long long类型。
【按照公式简单获取AC代码】
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;#define ll unsigned long longconst int maxn = 1000002;ll a[maxn],sum[maxn];int main(){ sum[3]=0; for(int i=4; i<=maxn; i++) { a[i] = (ll)(i*i-i*4+4)/4; sum[i]=sum[i-1]+a[i]; } int n; while(~scanf("%d",&n)&&n>=3) { printf("%llu\n",sum[n]); } return 0;}
- UVa 11401 - Triangle Countin
- UVa 11401 - Triangle Countin
- UVa 11401 Triangle Countin(找规律)
- 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
- uva 11401 Triangle Counting
- UVa 11401 Triangle Counting
- uva 11401 Triangle Counting
- UVa 11401 - Triangle Counting
- UVA 11401Triangle Counting
- UVA 11401:Triangle Counting
- [UE4]Animation Techniques used in Paragon部分翻译及索引
- Cuda在Ubuntu上的安装
- HDU 4642 简单博弈
- 系统常用命令章节 2016/3/29)ls命令
- 为什么使用消息队列?
- UVa 11401 - Triangle Countin
- Android 无线adb调试之所得!
- checkBox 自定义样式背景
- Java常用排序算法/程序员必须掌握的8大排序算法
- 命令行工具的使用
- Android开源项目之Music — Android的MediaPlayer架构介绍 + 补充
- git简单笔记
- Linux makefile 教程 非常详细,且易懂 http://blog.csdn.net/liang13664759/article/details/1771246
- 数据库(五)数据库访问性能优化