uva 11401 - Triangle Counting(数论)

737 篇文章 0 订阅
202 篇文章 0 订阅
博客介绍了如何解决UVA 11401题目,即计算从1到n中选取3个不同数字构成三角形的方法数。通过解析三角形的性质,得出每个最大边长x对应的三角形计数公式c(x),并使用递推关系式求解总方案数。解题策略基于数论和等差数列。
摘要由CSDN通过智能技术生成

题目链接:uva 11401 - Triangle Counting

题目大意:有多少种方法可以从1,2,3...n中选出3个不同的数组成三角形,给出n,求种数。

解题思路:加法原理,设最大边为x的三角形有c(x)个,那么另外两条边长分别为y和z,根据三角形的形式可以的y+z>x,所以z的范围即为xy<z<x
根据这个不等式可以得到每个y值所对应的z值个数,为等差数列,所以

c(x)=(x1)(x2)2x122
然后根据递推:f(n)=i=1nc(i)

代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
typedef unsigned long long ll;
const int N = 1e6+5;

ll f[N];
int main () {
    int n;
    f[3] = 0;
    for (ll i = 4; i < N; i++)
        f[i] = f[i-1] + ((i-1)*(i-2)/2 - (i-1)/2)/2;

    while (scanf("%d", &n) == 1 && n >= 3) {
        printf("%llu\n", f[n]);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值