思路:
答案是(2n)!/2,不知道啥原理,靠樣例猜。
題目的描述是:
而這種情況答案是(2n)!/2,這占了全排列一半的情況,那么另一半的情況應該是
即這種情況答案應該也是(2n)!/2
而這個題防止意外可以用快速模,但是最關鍵的點在於,這個除以二要怎么處理,如果把得出的答案最后除以二,是不行的,因為這個答案是你模完之后的答案。
我們可以這么做,就是遇到第一個偶數的時候先把答案除以二,或者直接循環從3開始,因為2除以二就是1,那直接從3開始也是一樣的。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <queue> #define x first #define y second using namespace std; typedef long long LL; typedef pair<int, int>PII; const int N = 200010; const LL MOD = 1000000007; int main() { ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; while (T--) { int n; cin >> n; LL res = 1; for (int i = 3; i <= 2 * n; i++) res = (res % MOD * i % MOD) % MOD; printf("%lld\n", res); } return 0; }