結果
問題 | No.93 ペガサス |
ユーザー |
![]() |
提出日時 | 2020-04-22 09:34:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 123 ms / 5,000 ms |
コード長 | 1,913 bytes |
コンパイル時間 | 3,503 ms |
コンパイル使用メモリ | 214,344 KB |
最終ジャッジ日時 | 2025-01-09 22:24:47 |
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
//Let's join Kaede Takagaki Fan Club !!#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#include <ext/pb_ds/tree_policy.hpp>using namespace std;typedef long long ll;typedef pair<int,int> P;typedef pair<int,P> P1;typedef pair<P,P> P2;#define pu push#define pb push_back#define mp make_pair#define eps 1e-7#define INF 1000000000#define fi first#define sc second#define rep(i,x) for(int i=0;i<x;i++)#define repn(i,x) for(int i=1;i<=x;i++)#define SORT(x) sort(x.begin(),x.end())#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())#define all(x) x.begin(),x.end()template<class T>void dmp(T a){rep(i,a.size()) cout << a[i] << " ";cout << endl;}template<class T>bool chmax(T&a, T b){if(a < b){a = b;return 1;}return 0;}template<class T>bool chmin(T&a, T b){if(a > b){a = b;return 1;}return 0;}template<class T>void g(T &a){cin >> a;}template<class T>void o(const T &a,bool space=false){cout << a << (space?' ':'\n');}//ios::sync_with_stdio(false);const ll mod = 1000000007;//998244353template<class T>void add(T&a,T b){a+=b;if(a >= mod) a-=mod;}int n;ll dp[2][505][505], F[1005];void calc(int id, int m){dp[id][0][0] = 1;for(int i=0;i<m;i++){for(int j=0;j<=i;j++){if(dp[id][i][j] == 0) continue;for(int k=i+1;k<=m;k++){add(dp[id][k][j+1], dp[id][i][j] * (k == i+1 ? 1 : 2) % mod);}}}}int main(){cin >> n;if(n == 1){puts("1");return 0;}calc(0, n/2);calc(1, n - n/2);F[0] = 1;repn(i, 1003) F[i] = F[i-1] * i % mod;ll ans = 0;repn(a, n/2) repn(b, n-n/2){ll x = dp[0][n/2][a] * dp[1][n-n/2][b] % mod;if(n%2 == (a+b)%2){ans += x * F[a+b] % mod;}else{ans -= x * F[a+b] % mod;}}cout << (ans%mod+mod)%mod << endl;}