結果
| 問題 |
No.1667 Forest
|
| コンテスト | |
| ユーザー |
tko919
|
| 提出日時 | 2021-09-03 23:49:15 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 912 ms / 3,000 ms |
| コード長 | 1,686 bytes |
| コンパイル時間 | 2,529 ms |
| コンパイル使用メモリ | 199,480 KB |
| 最終ジャッジ日時 | 2025-01-24 07:24:09 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 15 |
ソースコード
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;
//template
#define rep(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define ALL(v) (v).begin(),(v).end()
using ll=long long int;
const int inf = 0x3fffffff; const ll INF = 0x1fffffffffffffff; const double eps=1e-12;
template<typename T>inline bool chmax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
template<typename T>inline bool chmin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
ll mod(ll a,ll m){return (a%m+m)%m;}
ll mpow(ll a,ll t,ll m){
ll res=1;
while(t){
if(t&1)res=mod(res*a,m);
a=mod(a*a,m); t>>=1;
} return res;
}
ll minv(ll a,ll m){
ll b=m,u=1,v=0;
while(b){
ll t=a/b;
a-=t*b; swap(a,b);
u-=t*v; swap(u,v);
} u=mod(u,m); return u;
}
int get_root(int p){ //primitive root
vector<int> ds;
for(int x=1;x*x<=p-1;x++)if((p-1)%x==0){
ds.push_back(x);
if(x*x!=p-1)ds.push_back((p-1)/x);
}
sort(ALL(ds));
ds.pop_back();
for(int x=1;x<p;x++){
for(auto& d:ds){
if(mpow(x,d,p)==1)goto fail;
}
return x;
fail:;
} assert(0);
}
ll dp[310][310];
ll fact[310],ifac[310],coeff[310];
int main(){
int n,m;
cin>>n>>m;
fact[0]=1;
rep(x,1,n+1)fact[x]=(fact[x-1]*x)%m;
ifac[n]=minv(fact[n],m);
for(int x=n-1;x>=0;x--)ifac[x]=(ifac[x+1]*(x+1))%m;
coeff[1]=1;
rep(x,2,n+1)coeff[x]=mpow(x,x-2,m);
dp[0][0]=1;
rep(i,0,n){
rep(j,0,n){
rep(add,1,n+1)if(i+add<=n){
dp[i+add][j+1]=(dp[i+add][j+1]+((((dp[i][j]*fact[n-1-i])%m*ifac[add-1])%m*ifac[n-i-add])%m*coeff[add])%m)%m;
}
}
}
rep(x,0,n){
cout<<dp[n][n-x]<<'\n';
}
return 0;
}
tko919