Triangle
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 64 Solved: 23
[Submit][Status][Web Board]
Description
給你長度爲1~n n條邊,請你求出有多少種組合方法數可以選出三條邊構成三角形
Input
多組數據輸入輸出(數據組數考慮爲最大可能性)
每組數據輸入一個正整數n,表示有n條長度的邊可供選擇(n<=10000)
Output
每組數據輸出可構成三角形的邊的選擇方法數
Sample Input
2
4
Sample Output
0
1
思路:枚舉三個數中最大的一個數x,剩下的兩個小點的爲y和z,那麼當到達一個新的x的時候,會多出來0+1+...+(n-2)種情況,但是這不是最後的情況,還要減去y==z的x/2-1種情況,然後除以2,因爲y有可能到達之前的z,所以同一個三角形加了兩次
代碼:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
long long f[10050];
int main()
{
int n;
f[3]=0;
for(int i=4; i<=10000; i++)
f[i]=f[i-1]+((i-1)*(i-2)/2-i/2+1)/2;
while(~scanf("%d",&n))
{
if(n<3) printf("0\n");
else printf("%lld\n",f[n]);
}
return 0;
}