题解:P15708 [JAG 2023 Summer Camp #2] Umbrella Queries
P15708 [JAG 2023 Summer Camp #2] Umbrella Queries
题目描述
Micchan 注意到,从上方看时,一把雨伞是一个正多边形。因此,她创造了以下问题。
雨伞查询
一个正 \(N\) 边形有 \(N\) 条边和 \(\frac{N(N-1)}{2} - N\) 条对角线。考虑它们的并集,其中包含 \(\frac{N(N-1)}{2}\) 条线段。
有多少对线段满足以下两个条件?
- 这两条线段有一个公共端点。换句话说,它们在正 \(N\) 边形的某个顶点处有一个公共点。
- 这两条线段互相垂直。
Micchan 给出了 \(T\) 个上述问题。然而,她的朋友无法解决太多的请求。请代表她回答每个问题。
输入格式
输入满足以下约束:
- 所有输入均为整数。
- \(1 \leq T \leq 10^5\)
- \(3 \leq N_i \leq 10^9\)
输出格式
输出 \(T\) 行答案。在第 \(i\) 行,输出当 \(N = N_i\) 时问题的答案。每行末尾请添加换行符。
输入输出样例 #1
输入 #1
3
4
3
1000000000
输出 #1
4
0
499999999000000000
说明/提示
在样例输入 1 中,你只需要计算在正方形的顶点处垂直相交的线段对。
翻译由 DeepSeek V3.2 完成
题解
题意:
\(\qquad\) 寻找正多边形共端点垂直对角线对的对数
解决:
先说结论:
\(\qquad\) 正奇数边形中,不存在共端点的垂直线段,答案为 \(0\);
\(\qquad\) 正偶数边形中,每个顶点有 \(\frac{N}{2}−1\) 对垂直线段,总对数为顶点数乘以单个顶点的贡献,即 \(N×(\frac{N}{2}−1)\)。
为什么呢?
\(\qquad\) 设存在满足条件的一组,那么一定有一组是由一条对角线和两条边构成一个三角形,这个三角形中由该对角线参与构成的角的度数为 \(180- \frac{(n-2)*180}{n}=\frac{360}{n}\),另一条对角线又和这条对角线垂直,也就是说,这两条边一定在最中间的那条对角线的两边,也就是说一共有 \(\frac{N}{2}\) 对满足条件的线段。考虑到最中间的对角线只有一个,所以要 \(-1\)。同时有 \(N\) 个边,因此答案见上。
\(\qquad\) 同时,我们用这个思路也可以证明上述构造的第一条边合法时,另一条边一定不在该多边形的端点上。
code:
#include<bits/stdc++.h>
using namespace std;
long long t,n;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>n;
if(n%2)cout<<"0\n";
else cout<<1ll*n*(n/2-1)<<"\n";
}
}

浙公网安备 33010602011771号