Solution of 11401 - counter

Problem Description
source:https://uva.onlinejudge.org/external/114/11401.html

You are given n rods of length 1, 2, . . . , n. You have to pick any 3 of them and build a triangle. How many distinct triangles can you make? Note that, two triangles will be considered different if they have at least 1 pair of arms with different length.

Input 

The input for each case will have only a single positive integer n (3 ≤ n ≤ 1000000). The end of input will be indicated by a case with n < 3. This case should not be processed. 

Output 

For each test case, print the number of distinct triangles you can make. 

Sample Input 





Sample Output 


22 


Solution:
#include<stdio.h>
#include<math.h>
#define N 1000005

unsigned long long int output[N];

void calculate();
int main()
{
    unsigned long long int n, i;
    calculate();
    while(scanf("%llu",&n)==1)
    {
        if(n<3)
            break;
        printf("%llu\n",output[n]);
    }
    return 0;
}

void calculate()
{
    unsigned long long int i,n;
    output[3]=0;
    output[4]=1;
    for(i=5;i<N;i++)
    {
        n=i/2-1;
        output[i]=output[i-1]+2*(n*(n+1)/2)-(!((i&1))*n);
    }
}

No comments:

Post a Comment

Write your comment - Share Knowledge and Experience