首页 > 其他 > 详细

uva 11401 - Triangle Counting(数论)

时间:2014-05-15 03:03:13      阅读:417      评论:0      收藏:0      [点我收藏+]

题目链接:uva 11401 - Triangle Counting

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

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

c(x)=(x?1)?(x?2)2??x?12?2
然后根据递推: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;
}

uva 11401 - Triangle Counting(数论),布布扣,bubuko.com

uva 11401 - Triangle Counting(数论)

原文:http://blog.csdn.net/keshuai19940722/article/details/25742873

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!