UVA onlinejudge 11401 - Triangle Counting

题目链接: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 
#include 
#include 
#define ll long long
using 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>n)
	{
		if(n<3)
			break;
		cout<


你可能感兴趣的:(ACM_思维题)