106852024-04-08 21:15:03111Faültetéscpp17Accepted 100/100250ms50640 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

#define MOD 1000000007

int fac_mod(int x) {
	static vector<int> v = {1};
	while (v.size() - 1 < x) {
		v.push_back(v.back() * v.size() % MOD);
	}
	return v[x];
}

int pow_mod(int x, int p) {
	int r = 1;
	while (p > 0) {
		if (p % 2 == 1) {
			r *= x;
			r %= MOD;
		}
		p /= 2;
		x *= x;
		x %= MOD;
	}
	return r;
}

int inv_mod(int x) {
	return pow_mod(x, MOD - 2);
}

int inv_fac_mod(int x) {
	static vector<int> v = {1};
	while (v.size() - 1 < x) {
		v.push_back(inv_mod(fac_mod(v.size())));
	}
	return v[x];
}

int bin_mod(int n, int k) {
	if (k < 0 || k > n) {
		return 0;
	}
	return fac_mod(n) * inv_fac_mod(n - k) % MOD * inv_fac_mod(k) % MOD;
}

int cat_mod(int n) {
	return bin_mod(n * 2, n) * inv_fac_mod(n + 1) % MOD;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	int ans=0;
	for(int i=1;i<N;i++){
		int j=N-1-i;
		if(i>j){
			ans+=cat_mod(i)*fac_mod(i)%MOD*cat_mod(j)%MOD*fac_mod(j)%MOD;
			ans%=MOD;
		}
	}
	cout<<ans<<'\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1832 KiB
subtask210/10
2Accepted3ms2024 KiB
3Accepted3ms2140 KiB
4Accepted3ms2344 KiB
subtask340/40
5Accepted3ms2572 KiB
6Accepted3ms2940 KiB
7Accepted3ms2904 KiB
8Accepted3ms3188 KiB
9Accepted3ms3424 KiB
10Accepted3ms3376 KiB
11Accepted3ms3404 KiB
subtask450/50
12Accepted32ms9340 KiB
13Accepted143ms44592 KiB
14Accepted218ms44724 KiB
15Accepted59ms14560 KiB
16Accepted209ms44668 KiB
17Accepted109ms23956 KiB
18Accepted98ms24108 KiB
19Accepted230ms46616 KiB
20Accepted94ms24188 KiB
21Accepted250ms50640 KiB