码迷,mamicode.com
首页 > 其他好文 > 详细

uva 11401 Triangle Counting

时间:2015-08-05 14:47:04      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

//    uva 11401 Triangle Counting
//
//    题目大意:
//
//        求n范围内,任意选三个不同的数,能组成三角形的个数
//
//    解题方法:
//
//        我们设三角巷的最长的长度是c(x),另外两边为y,z
//        则由z + y > x得, x - y < z < x 当y = 1时,无解
//        当y = 2时,一个解,这样到y = x - 1 时 有 x - 2个
//        解,所以一共是0,1,2,3....x - 2,一共(x - 2) * (x - 1) / 2
//        而这个时候当y>x/2的时候就有 y = z的时候,所以要减去相等的
//        情况 y 从 x/2 + 1 .... x - 1一共 x - 1 - x/2.最后,这样
//        y和z可以互换的,所以计算了两次,要再/2,最后的最后累加就好了
//
//    感悟:
//
//        这道题,我开始真的没想到,不会哟,实在是想不到,太巧了,想了好久
//        继续加油吧~~~~FIGHTING

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

using namespace std;

typedef long long ll;

ll f[1000008];

void init(){
    f[3] = 0;
    for (ll i=4;i<=1000000;i++){
        f[i] = f[i-1] + ((i - 1) * (i-2) / 2 - (i-1- i/2)) / 2;
    }
}

int main(){
    init();
    int n;
    while(cin>>n){
        if (n < 3 )
            break;
        cout << f[n] << endl;
    }
}

 

uva 11401 Triangle Counting

标签:

原文地址:http://www.cnblogs.com/KingJourney/p/4704580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!