?
№ | Отправитель | Задача | Язык | Вердикт | Время | Память | Отослано | Протест. | |
---|---|---|---|---|---|---|---|---|---|
242037005 |
Дорешивание: do_while_true |
1089I - 22 | C++17 (GCC 9-64) | Полное решение | 234 мс | 664 КБ | 2024-01-17 11:05:05 | 2024-01-17 11:05:05 |
#include<cstdio> #include<vector> #include<queue> #include<cstring> #include<iostream> #include<algorithm> #include<ctime> #include<random> #include<assert.h> #define pb emplace_back #define mp make_pair #define fi first #define se second #define dbg(x) cerr<<"In Line "<< __LINE__<<" the "<<#x<<" = "<<x<<'\n' #define dpi(x,y) cerr<<"In Line "<<__LINE__<<" the "<<#x<<" = "<<x<<" ; "<<"the "<<#y<<" = "<<y<<'\n' #define DE(fmt,...) fprintf(stderr, "Line %d : " fmt "\n",__LINE__,##__VA_ARGS__) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int>pii; typedef pair<ll,int>pli; typedef pair<ll,ll>pll; typedef pair<int,ll>pil; typedef vector<int>vi; typedef vector<ll>vll; typedef vector<pii>vpii; typedef vector<pll>vpll; template<typename T>T cmax(T &x, T y){return x=x>y?x:y;} template<typename T>T cmin(T &x, T y){return x=x<y?x:y;} template<typename T> T &read(T &r){ r=0;bool w=0;char ch=getchar(); while(ch<'0'||ch>'9')w=ch=='-'?1:0,ch=getchar(); while(ch>='0'&&ch<='9')r=r*10+(ch^48),ch=getchar(); return r=w?-r:r; } template<typename T1,typename... T2> void read(T1 &x,T2& ...y){read(x);read(y...);} int mod; inline void cadd(int &x,int y){x=(x+y>=mod)?(x+y-mod):(x+y);} inline void cdel(int &x,int y){x=(x-y<0)?(x-y+mod):(x-y);} inline int add(int x,int y){return (x+y>=mod)?(x+y-mod):(x+y);} inline int del(int x,int y){return (x-y<0)?(x-y+mod):(x-y);} int qpow(int x,int y){ int s=1; while(y){ if(y&1)s=1ll*s*x%mod; x=1ll*x*x%mod; y>>=1; } return s; } const int N=410; int n=400; int fac[N],f[N],g[N],h[N][N]; signed main(){ #ifdef do_while_true // assert(freopen("data.in","r",stdin)); // assert(freopen("data.out","w",stdout)); #endif int T;read(T);read(mod); fac[0]=1; for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%mod; h[0][0]=1; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for(int k=1;k<=i;k++) cadd(h[i][j],1ll*h[i-k][j-1]*fac[k]%mod); for(int i=1;i<=n;i++){ g[i]=fac[i]; for(int j=1;j<i;j++) cdel(g[i],1ll*g[j]*fac[i-j]%mod); } f[1]=1;f[2]=2;f[3]=0; for(int i=4;i<=n;i++){ f[i]=fac[i]; int s=0; for(int j=1;j<i;j++) cadd(s,1ll*g[j]*fac[i-j]%mod); cdel(f[i],2ll*s%mod); for(int j=4;j<i;j++){ cdel(f[i],1ll*h[i][j]*f[j]%mod); } } while(T--){ int x;read(x); cout<<f[x]<<'\n'; } #ifdef do_while_true // cerr<<'\n'<<"Time:"<<1.0*clock()/CLOCKS_PER_SEC*1000<<" ms"<<'\n'; #endif return 0; }
?
?
?
?