uva 11401 Triangle Counting

时间:2023-03-09 08:14:49
uva 11401 Triangle Counting
//    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[]; void init(){
f[] = ;
for (ll i=;i<=;i++){
f[i] = f[i-] + ((i - ) * (i-) / - (i-- i/)) / ;
}
} int main(){
init();
int n;
while(cin>>n){
if (n < )
break;
cout << f[n] << endl;
}
}