Uva - 11401 - Triangle Counting(数学推导)

题意:从1到n的整数中选出3个数来组成一个三角形,有几种组法。

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=469&problem=2396

——>>设 x + y > z,

则 x > z - y;

故z - y < x < z;

对y进行枚举,接着看x有几种选法。

除掉等腰三角形,减掉重复计算的一半。

#include <iostream>

using namespace std;

const int maxn = 1000000 + 10;
long long f[maxn];

int main()
{
    int n;
    f[3] = 0;
    for(long long i = 4; i < maxn; i++)
        f[i] = f[i-1] + ((i-1)*(i-2)/2 - (i-1-i/2))/2;
    while(cin>>n)
    {
        if(n < 3) return 0;
        cout<<f[n]<<endl;
    }
    return 0;
}

发现,用printf("%I64d\n", f[n]);来输出WA无数次!!!!!!!!!!!!!!!!!!!!!!!!!!

下午,在师兄的指导下,OK,原来在Uva上若用64位整数的话,不可以用%I64d,而是要用%lld,这事……

你可能感兴趣的:(Uva - 11401 - Triangle Counting(数学推导))