結果

問題 No.8048 Order and Harmony
ユーザー leaf_1415leaf_1415
提出日時 2019-04-01 22:46:04
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 97 ms / 2,000 ms
コード長 1,861 bytes
コンパイル時間 410 ms
コンパイル使用メモリ 54,136 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-27 03:42:55
合計ジャッジ時間 3,182 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 61
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#define llint long long
#define mod 1000000007

using namespace std;

llint k;
llint f[] = {
	1,
	682498929,
	491101308,
	76479948,
	723816384,
	67347853,
	27368307,
	625544428,
	199888908,
	888050723,
	927880474,
	281863274,
	661224977,
	623534362,
	970055531,
	261384175,
	195888993,
	66404266,
	547665832,
	109838563,
	933245637,
	724691727,
	368925948,
	268838846,
	136026497,
	112390913,
	135498044,
	217544623,
	419363534,
	500780548,
	668123525,
	128487469,
	30977140,
	522049725,
	309058615,
	386027524,
	189239124,
	148528617,
	940567523,
	917084264,
	429277690,
	996164327,
	358655417,
	568392357,
	780072518,
	462639908,
	275105629,
	909210595,
	99199382,
	703397904,
	733333339,
	97830135,
	608823837,
	256141983,
	141827977,
	696628828,
	637939935,
	811575797,
	848924691,
	131772368,
	724464507,
	272814771,
	326159309,
	456152084,
	903466878,
	92255682,
	769795511,
	373745190,
	606241871,
	825871994,
	957939114,
	435887178,
	852304035,
	663307737,
	375297772,
	217598709,
	624148346,
	671734977,
	624500515,
	748510389,
	203191898,
	423951674,
	629786193,
	672850561,
	814362881,
	823845496,
	116667533,
	256473217,
	627655552,
	245795606,
	586445753,
	172114298,
	193781724,
	778983779,
	83868974,
	315103615,
	965785236,
	492741665,
	377329025,
	847549272,
	698611116
};

llint modpow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (modpow(a, n-1)%mod)) % mod;
	}
	else{
		return modpow((a*a)%mod, n/2) % mod;
	}
}

llint fact(llint n)
{
	llint ret = f[n / 10000000];
	llint rem = n % 10000000;
	for(int i = n/10000000*10000000+1; i <= n; i++){
		ret *= i, ret %= mod;
	}
	return ret;
}

int main(void)
{
	cin >> k;
	
	if(k % 2){
		cout << 0 << endl;
		return 0;
	}
	
	llint ans = fact(k), tmp = modpow(fact(k/2), mod-2);
	ans *= tmp * tmp % mod, ans %= mod;
	cout << ans << endl;
	
	return 0;
}
0