#include <bits/stdc++.h>
using namespace std;
typedef long long lo;
#define fi first
#define se second
#define endl "\n"
#define pb push_back
#define int long long
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(int i=1;i<=n;i++)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)
#define _ << " " <<
const lo inf = 1000000000;
const lo li = 202;
const lo mod = 1000000007;
int n,m,a[li],k,flag,t,b[li],c[li],dp[li][li][li][3][2];
int cev;
string s;
vector<int> v;
inline int add(int x,int y){
if(x+y>=mod)return x+y-mod;
return x+y;
}
inline int mul(int x,int y){
return (x%mod)*(y%mod)%mod;
}
inline int f(int aveb,int bvec,int avec,int sira,int flag){
int cevv=0;
if(aveb==0 && avec==0 && bvec==0)return 1;
if(~dp[aveb][bvec][avec][sira][flag])return dp[aveb][bvec][avec][sira][flag];
//~ cerr<<aveb _ bvec _ avec _ sira _ flag<<endl;
if(sira==0){
if(avec==0 && aveb==0)cevv=add(cevv,f(aveb,bvec,avec,sira+1,flag));
if(avec)cevv=add(cevv,mul(avec,f(aveb,bvec+1,avec-1,sira+1,flag)));
if(aveb)cevv=add(cevv,mul(aveb,f(aveb-1,bvec,avec,sira+1,1)));
}
if(sira==1){
if(aveb==0 && bvec==0)cevv=add(cevv,f(aveb,bvec,avec,sira+1,flag));
if(aveb)cevv=add(cevv,mul(aveb,f(aveb-1,bvec,avec+1,sira+1,flag)));
if(bvec)cevv=add(cevv,mul(bvec,f(aveb,bvec-1,avec,sira+1,1)));
}
if(sira==2){
if(avec==0 && bvec==0 && flag)cevv=add(cevv,f(aveb,bvec,avec,0,0));
if(bvec && flag)cevv=add(cevv,mul(bvec,f(aveb+1,bvec-1,avec,0,0)));
if(avec)cevv=add(cevv,mul(avec,f(aveb,bvec,avec-1,0,0)));
}
return dp[aveb][bvec][avec][sira][flag]=cevv;
}
int32_t main(void){
fio();
cin>>n>>t;
while(t--){
memset(dp,-1,sizeof(dp));
map<int,int> mpp1,mpp2,mpp3;
int avec=0,bvec=0,aveb=0;
for(int i=1;i<=2*n;i++){
cin>>a[i];
mpp1[a[i]]++;
}
for(int i=1;i<=2*n;i++){
cin>>b[i];
mpp2[b[i]]++;
if(mpp1[b[i]])aveb++;
}
for(int i=1;i<=2*n;i++){
cin>>c[i];
mpp3[c[i]]++;
if(mpp1[c[i]])avec++;
if(mpp2[c[i]])bvec++;
}
//~ cerr<<aveb _ bvec _ avec<<endl;
cout<<f(aveb,bvec,avec,0,0)<<endl;
}
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
217 ms |
387404 KB |
Output is correct |
2 |
Correct |
240 ms |
387412 KB |
Output is correct |
3 |
Correct |
256 ms |
387668 KB |
Output is correct |
4 |
Correct |
237 ms |
387664 KB |
Output is correct |
5 |
Correct |
385 ms |
387396 KB |
Output is correct |
6 |
Correct |
409 ms |
387668 KB |
Output is correct |
7 |
Correct |
462 ms |
387628 KB |
Output is correct |
8 |
Correct |
499 ms |
387408 KB |
Output is correct |
9 |
Correct |
599 ms |
388036 KB |
Output is correct |
10 |
Correct |
671 ms |
387668 KB |
Output is correct |