#include <bits/stdc++.h>
using namespace std;
using ll = long long; using pii = pair<ll,ll>;
ll N;
const ll p = 1e9+7;
const int pc1 = 255;
map<int,ll> dp;
inline array<int,3> garr(int x) {
return (array<int,3>{x>>16,(x>>8)&pc1,x&pc1});
}
inline int gv(array<int,3> a0) {
return ((a0[0]<<16LL)+(a0[1]<<8LL)+a0[2]);
}
ll g1Y(int a, int b, int c) { //Y = round already cleared
if ((a<0)||(b<0)||(c<0)) return 0;
ll v = 0;
//if (b>=0) {
v+= b*dp[gv({a,b-1,c})];
//}
//if (a>=0) {
v+= a*dp[gv({a-1,b,c+1})];
//}
return (v%p);
}
ll g1N(int a, int b, int c) { //N = round not cleared yet
if ((a<0)||(b<0)||(c<0)) return 0;
return (b*dp[gv({a,b-1,c})])%p;
}
ll g2Y(int a, int b, int c) {
if ((a<0)||(b<0)||(c<0)) return 0;
ll v = 0;
v += a*g1Y(a-1,b,c);
v += c*g1Y(a,b+1,c-1);
return (v%p);
}
ll g2N(int a, int b, int c) {
if ((a<0)||(b<0)||(c<0)) return 0;
//cout << "calling g2N at a,b,c="<<a<<","<<b<<","<<c<<"\n";
ll v = 0;
v += a*g1Y(a-1,b,c);
v += c*g1N(a,b+1,c-1);
return (v%p);
}
ll gdp(int a, int b, int c) {
if ((a<0)||(b<0)||(c<0)) return 0;
ll v = 0;
v += c*g2Y(a,b,c-1);
v += b*g2N(a+1,b-1,c);
return (v%p);
}
void solve() {
dp.clear();
vector<ll> va,vb,vc;
int prt[3*N];
for (ll i=0;i<(3*N);i++) {
prt[i]=0;
}
for (int i=0;i<(2*N);i++) {
int x; cin >> x; x--; //A
prt[x]|=1;
}
for (int i=0;i<(2*N);i++) {
int x; cin >> x; x--; //B
prt[x]|=2;
}
for (int i=0;i<(2*N);i++) {
int x; cin >> x; x--; //C
prt[x]|=4;
}
int nea=0,neb=0,nec=0;
for (int i=0;i<(3*N);i++) {
if (prt[i]==3) {
nec++;
}
if (prt[i]==5) {
neb++;
}
if (prt[i]==6) {
nea++;
}
}
ll SM = nea+neb+nec;
//cout << "nea,neb,nec="<<nea<<","<<neb<<","<<nec<<"\n";
dp[0]=1;
for (int S=1;S<=SM;S++) {
for (int a=0;a<=S;a++) {
for (int b=0;b<=(S-a);b++) {
int c = S-a-b;
dp[gv({a,b,c})]=gdp(a,b,c);
}
}
}
cout << dp[gv({nea,neb,nec})] <<"\n";
}
int main() {
ll T;
cin >> N >> T;
while(T--) {
solve();
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
336 KB |
Output isn't correct |
2 |
Incorrect |
1 ms |
336 KB |
Output isn't correct |
3 |
Incorrect |
7 ms |
592 KB |
Output isn't correct |
4 |
Incorrect |
46 ms |
3024 KB |
Output isn't correct |
5 |
Incorrect |
2000 ms |
38380 KB |
Output isn't correct |
6 |
Execution timed out |
2069 ms |
26440 KB |
Time limit exceeded |
7 |
Execution timed out |
2078 ms |
40544 KB |
Time limit exceeded |
8 |
Execution timed out |
2081 ms |
58096 KB |
Time limit exceeded |
9 |
Execution timed out |
2073 ms |
78732 KB |
Time limit exceeded |
10 |
Execution timed out |
2068 ms |
101168 KB |
Time limit exceeded |