【UVA11401】Triangle Counting——计算方法

题意:从 1,2,3,n 中选出三个不同的整数,使它们能够组成三角形,问有多少种方法

分析:设最长的边为 x ,另外的两条边为 y,z ,所以 y+z>x ,所以z的范围为 x>z>xy
y=1x>z>x1
y=2x>z>x2z=x1num=1
y=3x>z>x3z=x1,x2num=2

y=x1x>z>1z=2,3,4,x1num=x2
所以当最长的边为x时, num=i=1x2=(x1)(x2)2
由于我们没有规定 yz 的大小,所以结果中有重复的,当 y!=zy=z
y=zx1>y=z>=x/2+1
所以 numx=12((x1)(x2)2x12)
题意要求最大边不超过n的三角形数目,所以 F(n)=x=1nnumx

#include <cstdio>
#include <iostream>

using namespace std;

typedef long long LL;

const int Max = 1000100;

LL num[Max];

int main()
{
    num[3] = 0;
    for(LL i = 4;i<Max;i++)
    {
        num[i] = num[i-1]+((i-1)*(i-2)/2-(i-1)/2)/2;

    }

    int n;

    while(~scanf("%d",&n)&&n>=3)
    {
        printf("%lld\n",num[n]);
    }
    return 0;
}

你可能感兴趣的:(【UVA11401】Triangle Counting——计算方法)