题目链接:http://cojs.tk/cogs/problem/problem.php?pid=184
分析:
排列组合问题。
首先,我们可以计算出在木头上割三刀的所有情况–>C(n - 1,3)
如果我们切出了大于等于N / 2的木条即非法情况。
我们枚举不合法的木条的长度,注意是长度,非其位置。然后剩下的木条再切两刀。—>C(n - t - 1,2).由于我们拿出来的这条木条可以放在其它三条木条的前中后等4个位置,所以要将C(n - t - 1) * 4。
组合数学要考虑多种情况时,往往先枚举,再用排列组合。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
long long n,nn;
freopen("quad.in","r",stdin);
freopen("quad.out","w",stdout);
cin>>n;
long long dd=(n-1)*(n-2)*(n-3)/6;
if (n&1) nn=n/2+1;
else nn=n/2;
for (long long i=nn;i<=n-3;i++) dd-=(n-i-1)*(n-i-2)*2;
cout<<dd;
return 0;
}