Submission #4046348
Source Code Expand
#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = int(a); i < int(b); i++)
#define rer(i, a, b) for(int i = int(a) - 1; i >= int(b); i--)
#define sz(v) (int)(v).size()
#define pb push_back
#define sc second
#define fr first
#define sor(v) sort(v.begin(),v.end())
#define rev(s) reverse(s.begin(),s.end())
#define lb(vec,a) lower_bound(vec.begin(),vec.end(),a)
#define ub(vec,a) upper_bound(vec.begin(),vec.end(),a)
#define uniq(vec) vec.erase(unique(vec.begin(),vec.end()),vec.end())
using namespace std;
typedef long long int ll;
typedef pair <int, int> P;
ll mod_pow(ll x, ll n, ll mod){
if (n==0) return 1;
ll res=mod_pow(x*x%mod, n/2, mod);
if (n%2==1) res=res*x%mod;
return res;
}
ll euler_phi(ll n){
ll res=n;
for(ll i=2;i*i<=n;i++){
if(n%i==0){
res=res/i*(i-1);
for(;n%i==0;n/=i);
}
}
if(n!=1) res=res/n*(n-1);
return res;
}
ll extgcd(ll a, ll b, ll& x, ll&y){
ll d=a;
if(b!=0){
d=extgcd(b, a%b, y, x);
y-=(a/b)*x;
}
else {
x=1; y=0;
}
return d;
}
ll mod_inverse(ll a, ll m){
ll x,y;
extgcd(a,m,x,y);
return (m+x%m)%m;
}
ll fact[3010];
ll mod_fact(ll n, ll p, ll& e){
e=0;
if(n==0) return 1;
ll res=mod_fact(n/p,p,e);
e+=n/p;
if(n/p%2!=0) return res*(p-fact[n%p])%p;
return res*fact[n%p]%p;
}
ll mod_comb(ll n, ll k, ll p){
if(n<0||k<0||n<k) return 0;
ll e1, e2, e3;
ll a1=mod_fact(n,p,e1), a2=mod_fact(k,p,e2), a3=mod_fact(n-k,p,e3);
if(e1>e2+e3) return 0;
return a1*mod_inverse(a2*a3%p,p)%p;
}
ll dp[3010][3010];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll N,M;
cin>>N>>M;
dp[0][0]=1;
rep(i,1,N+1){
rep(j,0,i+1){
if(j>0) dp[i][j]+=dp[i-1][j-1];
dp[i][j]+=dp[i-1][j]*(j+1)%M;
dp[i][j]%=M;
}
}
ll a[3010]={};
rep(i,1,N+1){
ll s=0;
rep(j,0,i+1){
s+=dp[i][j]*mod_pow(2,(N-i)*j,M)%M;
s%=M;
}
s*=mod_pow(2, mod_pow(2,N-i,M-1), M);
s%=M;
a[i]=s;
}
fact[1]=1;
rep(i,2,3010){
fact[i]=fact[i-1]*i;
fact[i]%=M;
}
ll ans=0;
rep(i,1,N+1){
ans+=mod_comb(N, i, M)*a[i]*(i%2?1:-1);
ans%=M;
}
ans=((mod_pow(2,mod_pow(2,N,M-1),M)-ans)%M+M)%M;
cout <<ans<<"\n";
}
Submission Info
Submission Time |
|
Task |
E - Everything on It |
User |
yuki1997 |
Language |
C++14 (GCC 5.4.1) |
Score |
900 |
Code Size |
2483 Byte |
Status |
AC |
Exec Time |
2289 ms |
Memory |
69248 KB |
Judge Result
Set Name |
Sample |
Subtask1 |
Subtask2 |
Score / Max Score |
0 / 0 |
600 / 600 |
300 / 300 |
Status |
|
|
|
Set Name |
Test Cases |
Sample |
a01, a02, a03, a04 |
Subtask1 |
a01, a02, a03, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24 |
Subtask2 |
a01, a02, a03, a04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, c41, c42, c43, c44 |
Case Name |
Status |
Exec Time |
Memory |
a01 |
AC |
1 ms |
256 KB |
a02 |
AC |
1 ms |
384 KB |
a03 |
AC |
2 ms |
512 KB |
a04 |
AC |
2279 ms |
69248 KB |
b05 |
AC |
1 ms |
384 KB |
b06 |
AC |
1 ms |
384 KB |
b07 |
AC |
1 ms |
384 KB |
b08 |
AC |
1 ms |
384 KB |
b09 |
AC |
1 ms |
384 KB |
b10 |
AC |
1 ms |
384 KB |
b11 |
AC |
1 ms |
384 KB |
b12 |
AC |
1 ms |
384 KB |
b13 |
AC |
1 ms |
384 KB |
b14 |
AC |
2 ms |
512 KB |
b15 |
AC |
2 ms |
512 KB |
b16 |
AC |
2 ms |
512 KB |
b17 |
AC |
2 ms |
512 KB |
b18 |
AC |
2 ms |
512 KB |
b19 |
AC |
2 ms |
512 KB |
b20 |
AC |
2 ms |
512 KB |
b21 |
AC |
2 ms |
512 KB |
b22 |
AC |
2 ms |
512 KB |
b23 |
AC |
2 ms |
512 KB |
b24 |
AC |
2 ms |
512 KB |
c25 |
AC |
2 ms |
512 KB |
c26 |
AC |
2 ms |
640 KB |
c27 |
AC |
5 ms |
2688 KB |
c28 |
AC |
11 ms |
4736 KB |
c29 |
AC |
32 ms |
8832 KB |
c30 |
AC |
75 ms |
12928 KB |
c31 |
AC |
154 ms |
19072 KB |
c32 |
AC |
364 ms |
29312 KB |
c33 |
AC |
837 ms |
43648 KB |
c34 |
AC |
1593 ms |
60032 KB |
c35 |
AC |
2156 ms |
68224 KB |
c36 |
AC |
2221 ms |
68224 KB |
c37 |
AC |
2241 ms |
68608 KB |
c38 |
AC |
2259 ms |
68864 KB |
c39 |
AC |
2277 ms |
68992 KB |
c40 |
AC |
2278 ms |
69120 KB |
c41 |
AC |
2282 ms |
69120 KB |
c42 |
AC |
2288 ms |
69120 KB |
c43 |
AC |
2289 ms |
69248 KB |
c44 |
AC |
2277 ms |
69248 KB |