- 题意:
输入n,求正n边形中的对角线1和对角线2的个数(对角线1:至少与其它一个对角线平行;对角线2:至少与其它一个对角线垂直)。对角线不能是多边形的边
(4 ≤ n ≤ 10e5)
- 分析:
思路题。无论是几边形,两个平行边中间所夹的两側的边数必须是同样的。也就是说两个端点朝着一个方向移动若干个短点后能够得到还有一条平行边。也就是说,多边形的每一条边都存在平行便(6边形的时候有一点特殊情况单独处理)
垂直比較麻烦:对于n是偶数的情况,能够得到,每一个点的n-3条边都是对角线2(n为偶数的时候,随意一条对角线一定将原图形分成左右两个对称的图形)。n为奇数时候,没有对角线2(仅仅能是推測)
int a[2][110]; int main() { int n; a[0][4] = 0; a[0][5] = 0; a[0][6] = 6; a[1][4] = 2; a[1][5] = 0; a[1][6] = 9; while (~RI(n)) { if (n <= 6) { printf("%d %d ", a[0][n], a[1][n]); } else { cout << 1LL * (n - 3) * n / 2 << ' '; if (n & 1) cout << 0 << endl; else cout << 1LL * (n - 3) * n / 2 << endl; } } return 0; }