【Luogu P5377】[THUPC2019]鸽鸽的分割
链接:
题目大意:
在圆上选择 \(n\) 个点互相连接,问最多能分出多少面。
正文:
一遇到点面线就考虑欧拉公式 \(F-E+V=2\Rightarrow F=2+E-V\)。
在本题中,点数为原本的点和线段之间的交点 \(V=n+\dbinom{n}{4}\);边数就是弧、原本点之间相连的边和每个交点带来的两个贡献 \(E=n+\dbinom{n}{2}+2\dbinom{n}{4}\)。
因此答案 \(F=2-n-\dbinom{n}{4}+n+\dbinom{n}{2}+2\dbinom{n}{4}=2+\dbinom{n}{4}+\dbinom{n}{2}\),还要减去圆外的一个面,所以 \(F=1+\dbinom{n}{4}+\dbinom{n}{2}\)。
代码:
int n;
int main()
{
while (scanf ("%d", &n) != EOF)
{
int cn2 = n * (n - 1) / 2,
cn4 = n * (n - 1) * (n - 2) * (n - 3) / 24;
printf ("%d\n", cn2 + cn4 + 1);
}
return 0;
}