HDU 1249 三角形(递推)
2014-03-31 21:00
267 查看
题目链接:点击打开链接
题目分析:ACM中数学类题目,要么是结论性的,要么就是递推,所以先画几个图形看看
n=1 ----------> face =2;
n=2 -----------> face =8;
n=3 -----------> face =20;
每条边最多与前面已画的(n—1)个三角形的各两条边相交,第n个三角形每条边最多与2*(n-1)条边相交。对于每条边,它所截出的区域(不算第n个三角形的角)有2*(n-1)-1个,于是3条边可截出6*(n-1)-3个区域,再加上f
已经截出的面,加上新增三角形一定会增加的3个角(face),
f
=f[n-1]+3+6*n-9=f[n-1]+6*(n-1);
所以
另外附上一位仁兄的证明
题目分析:ACM中数学类题目,要么是结论性的,要么就是递推,所以先画几个图形看看
n=1 ----------> face =2;
n=2 -----------> face =8;
n=3 -----------> face =20;
每条边最多与前面已画的(n—1)个三角形的各两条边相交,第n个三角形每条边最多与2*(n-1)条边相交。对于每条边,它所截出的区域(不算第n个三角形的角)有2*(n-1)-1个,于是3条边可截出6*(n-1)-3个区域,再加上f
已经截出的面,加上新增三角形一定会增加的3个角(face),
f
=f[n-1]+3+6*n-9=f[n-1]+6*(n-1);
所以
另外附上一位仁兄的证明
#include<algorithm> #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<cmath> using namespace std; __int64 f[10005]; void init() { f[1]=2; for(int i=2;i<=10000;i++) f[i]=f[i-1]+6*(i-1); } int main() { int t,n; init(); scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%I64d\n",f ); } return 0; }
相关文章推荐
- 乘法口诀
- HDU 4504
- linux内核编译与系统调用的添加(适合3.0及以后版本内核)
- int a[10]
- CodeForces 407A Triangle
- 组队赛5:二分图+大模拟
- 写轮眼桌面时钟
- 第三章作业
- 无名管道pipe 有名管道fifo
- 学JAVA (MARS)中2014年3月31日17:35:08
- 使用指针前必须初始化,且应该指向实际的变量
- 添加工具栏和工具栏按钮添加图片
- SPI协议简介
- PHP json_encode() 函数介绍
- socket阻塞与非阻塞,同步与异步、I/O模型
- DAX
- 用LuaBridge为Lua绑定C/C++对象
- 内存,磁盘,cache等访问速度
- java关键词
- PHP json_encode() 函数介绍