标签:
// 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; } }
标签:
原文地址:http://www.cnblogs.com/KingJourney/p/4704580.html