UVA onlinejudge 11401 - Triangle Counting

来源:互联网 发布:python计算机视觉编程 编辑:程序博客网 时间:2024/05/16 19:38

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2396

题目大意:(这题不好复制过来,就简单说一下题意)输入整数n,从1-n数字中取能构成三角形的三个数,问能得到多少个不同的三角形(不同是指至少有一条边不等)。

Input

5
8
0

SamplOutput
3
2


解题思路:观察规律,递推,实现O(n)复杂度。n为3时这样的三角形有0个,n为4时,以4为一条边的三角形有1个即2,3,4,所以一共有1+0=1个,n为5时,以5为一条边的三角形有2个,即5,4,3,和5,4,2。所以一共2+1=3个......(递推到即可)。n从3开始以n为一条边的三角形分别有0,1,2,4,6,9,12,16,20,25,30......个,观察就能找到规律。


代码如下:

#include <cstdio>#include <iostream>#include <cstring>#define ll long longusing namespace std;const ll maxn=1000005;ll b[maxn],a[maxn];//a[]是以i为边的能得到几个三角形,b[]是i个数能得到几个三角形int main(){ll n;memset(b,0,sizeof(b));memset(a,0,sizeof(a));a[3]=0;ll cur=1,ans=0;for(ll i=4;i<maxn;i++){a[i]=a[i-1]+cur;if(i%2)cur++;ans+=a[i];b[i]+=ans;}while(cin>>n){if(n<3)break;cout<<b[n]<<endl;}return 0;}


0 0
原创粉丝点击