Advertisement
Guest User

Untitled

a guest
Apr 1st, 2024
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.02 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4.     ios_base::sync_with_stdio(false);
  5.     cin.tie(NULL);
  6.     int n,p;
  7.     cin>>n>>p;
  8.     vector<int> s(n),t(n);
  9.     for(auto &x:s)cin>>x;
  10.     for(auto &x:t)cin>>x;
  11.     sort(s.begin(),s.end());
  12.     sort(t.begin(),t.end());
  13.     const int N = 50;
  14.     vector<int> fac(N,1),ifac(N,1);
  15.     for(int i=2;i<N;++i){
  16.         fac[i] = (fac[i-1]*1ll*i)%p;
  17.         ifac[i] = p-(((p/i)*1ll*ifac[p%i])%p);
  18.     }
  19.     for(int i=2;i<N;++i){
  20.         ifac[i] = (ifac[i]*1ll*ifac[i-1])%p;
  21.     }
  22.     unordered_map<long long,int> ans;
  23.     function<int(int,long long)> solve = [&](int i,long long hsh){
  24.         if(!hsh)return 1;
  25.         auto it = ans.find(hsh);
  26.         if(it!=ans.end())return it->second;
  27.         int cur = 0;
  28.         for(int j=n-1;j>=0;--j){
  29.             if(t[j]<s[i])break;
  30.             if(!((hsh>>j)&1))continue;
  31.             cur = (cur+(ifac[t[j]-s[i]]*1ll*solve(i-1,hsh^(1ll<<j))))%p;
  32.         }
  33.         return ans[hsh]=cur;
  34.     };
  35.     int T = 0;
  36.     for(int i=0;i<n;++i)T+=(t[i]-s[i]);
  37.     int fans = 1;
  38.     for(int i=1;i<=T;++i)fans = (fans*1ll*i)%p;
  39.     cout<<((fans*1ll*solve(n-1,(1ll<<n)-1))%p);
  40.     return 0;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement