https://codeforces.com/contest/1581/problem/A
**思路:**长度为 2 n 2n 2n的数组全排列的数量除以 2 2 2,即为所求排列数目。
对于除 2 2 2操作,可以在阶乘的时候直接从 3 3 3开始乘,就略过除 2 2 2的步骤了
#include
#define int long long
using namespace std;
const int MOD = 1e9 + 7;
inline int get(int n, int sum = 1){
for(int i = 3; i > n;
cout 1
n=1 ∩ m=0 ∩ k>1,这种情况的图唯一存在;对于
n
n
n个点的合法无向图(不存在重边和自环),其边数目的取值范围应为
{
x
∣
n
−
1
≤
x
≤
n
×
(
n
−
1
)
2
,
x
∈
z
}
\{x|n - 1 \leq x \leq \frac{n \times (n - 1)}{2}, x \in z\}
{x∣n−1≤x≤2n×(n−1),x∈z};
- 对于不位于该范围内的边数
m
m
m直接剔除,为
N
O
NO
NO;
- 对于位于该范围内的
m
m
m,我们可以通过图像得知,
k
−
1
k - 1
k−1应当至少大于
2
2
2,也就使
k
>
3
k > 3
k>3,才有可能出现合法图;
针对以上情况进行讨论即可。其它情况全部为
N
O
NO
NO。
#include
#define YES cout n * (n - 1) / 2 || m 2) YES;
else if(m >= n - 1 && m 3) YES;
else NO;
}
signed main(){
int t = 0; cin >> t;
while(t--) solve();
return 0;
}