[タイトル説明:
桂林は、N個の異なるファイルを持っている、今、彼はこれらの各フォルダ内のファイルと2つだけのプロジェクトを保存するためにN-1フォルダ(同じ)を作成しようと、各プロジェクトは、ファイルまたはフォルダを指定でき、彼はどのように多くの異なるストレージ方法を尋ねました。
[入力説明:
正の整数Tの最初の行は、データセットの数を表します。
次T線各正の整数N.
[出力]説明:
総Tライン、19260817という意味で桂林ストレージモードの総数。
[サンプル入力]:
2
3
5
[]出力例:
3
105
[時間制限、およびデータの説明の範囲:
時間:1秒容量:256M
データの30%:2≤N≤20。
データの70%:2≤N≤1000。
100%のデータ:T≤100、2≤N≤10^ 6
考え
簡単な順列が取得する:[1] F、[2] = 1 fは、1 = F [3] = C(3,1)= 3、[4] = C(3,1)* F F [1] * F [3] + C(2,2)* F [2] * F [2] / 2(が繰り返される場合、手動で見つけることができるものをシミュレートするために)F、15 = [5] = 105···
注意深い観察:1 = 1,3 = 1 * * 7 3.15 = 1 * 3 * 5105 = 1 * 3 * 5 ...あなたはそれを見つけますか?
これは、列の奇数の積である(曲がったと始め先生、Taはこの問題は、法律が見つからない、怠惰ではないことを私に言った、このトピックの数、それへの貢献ではありません...)
コード:
#include <cmath> の#include <cstdioを> する#include <CStringの> する#include <iostreamの> する#include <アルゴリズム> 名前空間STDを使用して、 const int型N = 2000010; const int型のMod = 19260817; int型T、N。 長い長いX [N]。 INTメイン(){ X [0] = xの[1] = 1。 (私は++; iが<= N I = 2の整数)のために X [I] = xで[I-2] * I%のMod。 scanf関数( "%のD"、&T)。 (t--){一方 のscanf( "%d個"、&N); printf( "%Dを\ n"、X [2 * N-3])。 } 0を返します。 }