QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#227317#1277. PermutationRickyTL 773ms61740kbC++142.3kb2023-10-27 12:10:362023-10-27 12:10:36

Judging History

你现在查看的是最新测评结果

  • [2023-10-27 12:10:36]
  • 评测
  • 测评结果:TL
  • 用时:773ms
  • 内存:61740kb
  • [2023-10-27 12:10:36]
  • 提交

answer

#include<iostream>
#include<set>
#include<map>
#include<time.h>
#include<random>
#include<vector>
#include<iomanip>
#include<string.h>
#include<algorithm>
using namespace std;
//#pragma optimize(2)
#define fi first
#define se second
#define ll long long
#define ull unsigned ll
#define str string
#define db double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pq priority_queue
#define pqMax(x) pq< x >
#define pqMin(x) pq< x ,vector< x >,greater< x > >
#define MP make_pair
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define lowbit(x) ((x)&(-(x)))
#define sz(x) ((int) (x).size())
#define ms(a,t) memset(a,t,sizeof(a))
#define FORe(i, u, v) for (int i = h[u], v; v = e[i].to, i; i = e[i].nxt)
const ll INF = 0x3f3f3f3f;
const int maxn = 50+10;
const int maxm = 2e5+10;
const ll mod = 1e9+7;
const db eps = 1e-6;
//ll read() {
//	ll x=0,f=1;char ch=getchar();
//	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
//	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
//	return x*f;
//}
int n,m;
int a[maxn];
ll turn(ll x) {
	ll ret = 0;
	for(int i = 0; i < n; i++) {
		if((x >> i) & 1) ret |= (1ll<<(n-i-1)); 
	}
	return ret;
}
map<pair<int,ll>,ll> mp;
ll dfs(int p,ll st) {
	if(p == n+1) return 1;
	if(mp.count(MP(p,st))) return mp[MP(p,st)];
	ll rev = turn(st);
	ll ret = 0;
	for(int i = 1; i <= n; i++) {
		if((st >> (i-1)) & 1) continue;
		if(a[p] != 0 && i != a[p]) continue;
		int t = n - 2*i + 1;
//		cout<<' '<<(rev>>t)<<'\n';
		if(t >= 0) {
			if((st & ((1ll<<(n-t))-1)) ^ (rev >> t)) continue;
		} else {
			t = -t;
			if((st >> t) ^ (rev & ((1ll<<(n-t))-1))) continue;
		}
		ret += dfs(p+1,st | (1ll << (i-1)));
	}
//	cout<<p<<' '<<st<<' '<<rev<<' '<<ret%mod<<'\n';
	return mp[MP(p,st)] = ret % mod;
}
int f[maxn];
void Solve() {
	cin >> n;
	int cnt = 0;
	for(int i=1;i<=n;i++) {
		cin >> a[i];
		if(a[i] == 0) cnt++;
	}
	mp.clear();
	cout<<(f[cnt] - dfs(1,0) + mod) % mod<<'\n';
}
int main() {
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
//	ios::sync_with_stdio(0);
//	cin.tie(0); cout.tie(0);
	f[0] = 1; for(int i = 1; i <= 50; i++) f[i] = 1ll * f[i-1] * i % mod;
	int tt; cin >> tt ; while(tt--)
	Solve();
	return 0;
}
/*
调试先查四件事
1. 数组开够没
2. ijk写错没
3. int爆了没
4. double取等了没
*/


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3340kb

input:

2
3
0 0 0
7
1 0 3 0 0 6 0

output:

2
21

result:

ok 2 tokens

Test #2:

score: 0
Accepted
time: 1ms
memory: 3524kb

input:

50
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 50 tokens

Test #3:

score: 0
Accepted
time: 0ms
memory: 3572kb

input:

25
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0
2
0 0

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 25 tokens

Test #4:

score: 0
Accepted
time: 1ms
memory: 3408kb

input:

16
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0
3
0 0 0

output:

2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2

result:

ok 16 tokens

Test #5:

score: 0
Accepted
time: 1ms
memory: 3544kb

input:

5
10
0 0 0 0 0 0 0 0 0 0
10
0 0 0 0 0 0 0 0 0 0
10
0 0 0 0 0 0 0 0 0 0
10
0 0 0 0 0 0 0 0 0 0
10
0 0 0 0 0 0 0 0 0 0

output:

3627734
3627734
3627734
3627734
3627734

result:

ok 5 tokens

Test #6:

score: 0
Accepted
time: 1ms
memory: 3408kb

input:

4
11
0 10 11 6 1 0 8 0 0 3 5
11
0 0 0 10 8 5 4 1 0 2 9
11
0 4 0 3 11 0 0 0 7 8 1
11
0 8 0 3 9 0 0 0 7 4 0

output:

24
24
120
720

result:

ok 4 tokens

Test #7:

score: 0
Accepted
time: 1ms
memory: 3464kb

input:

4
12
0 0 11 0 0 6 1 0 4 0 5 8
12
7 0 10 11 4 6 1 8 0 12 0 0
12
0 12 0 0 0 0 5 0 1 0 10 11
12
0 0 4 3 9 12 2 5 1 10 6 0

output:

720
24
5040
6

result:

ok 4 tokens

Test #8:

score: 0
Accepted
time: 1ms
memory: 3420kb

input:

3
13
0 13 6 3 0 11 0 0 0 0 1 2 0
13
9 0 0 0 0 0 8 0 5 7 0 12 0
13
0 0 0 0 0 0 3 10 2 9 0 12 0

output:

5040
40320
40320

result:

ok 3 tokens

Test #9:

score: 0
Accepted
time: 1ms
memory: 3400kb

input:

3
14
0 12 10 9 0 0 11 0 0 1 6 4 8 13
14
0 0 8 0 0 9 14 3 0 0 6 2 0 0
14
13 0 8 0 0 0 0 0 14 7 4 6 0 3

output:

120
40320
5040

result:

ok 3 tokens

Test #10:

score: 0
Accepted
time: 0ms
memory: 3452kb

input:

3
15
8 7 12 14 6 0 0 9 4 0 1 0 0 0 2
15
5 0 0 9 0 7 15 0 13 4 11 0 0 0 2
15
0 0 0 2 0 0 7 0 0 8 0 13 14 10 3

output:

720
5040
40320

result:

ok 3 tokens

Test #11:

score: 0
Accepted
time: 11ms
memory: 4228kb

input:

2
20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

143388927
143388927

result:

ok 2 tokens

Test #12:

score: 0
Accepted
time: 5ms
memory: 4132kb

input:

1
30
21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

586750519

result:

ok "586750519"

Test #13:

score: 0
Accepted
time: 5ms
memory: 4480kb

input:

1
40
0 0 0 0 23 26 0 0 0 0 0 0 32 20 33 0 0 0 0 0 0 0 0 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0

output:

943272305

result:

ok "943272305"

Test #14:

score: 0
Accepted
time: 362ms
memory: 32852kb

input:

1
41
0 0 0 0 0 0 0 0 0 14 38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 35 9 0 0

output:

523095984

result:

ok "523095984"

Test #15:

score: 0
Accepted
time: 631ms
memory: 52780kb

input:

1
42
0 0 0 0 0 0 0 0 0 0 0 0 4 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 1 0

output:

472948359

result:

ok "472948359"

Test #16:

score: 0
Accepted
time: 1ms
memory: 3392kb

input:

5
10
0 0 7 0 0 0 0 0 0 3
10
0 5 0 0 0 0 0 9 0 0
10
1 6 0 0 0 0 0 5 0 0
10
0 0 4 0 0 0 3 0 1 9
10
0 0 0 0 0 0 0 6 0 0

output:

40320
40320
5040
718
362648

result:

ok 5 tokens

Test #17:

score: 0
Accepted
time: 1ms
memory: 3540kb

input:

5
9
0 6 0 0 0 0 0 0 0
9
6 0 0 0 3 0 0 7 0
9
8 0 0 0 0 0 7 3 4
9
0 0 0 0 0 0 0 0 0
9
0 0 0 0 0 0 8 2 0

output:

40270
720
120
362384
4996

result:

ok 5 tokens

Test #18:

score: 0
Accepted
time: 773ms
memory: 61740kb

input:

1
42
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

94131117

result:

ok "94131117"

Test #19:

score: 0
Accepted
time: 548ms
memory: 45420kb

input:

1
40
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

614960773

result:

ok "614960773"

Test #20:

score: 0
Accepted
time: 207ms
memory: 21708kb

input:

1
35
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

478043548

result:

ok "478043548"

Test #21:

score: 0
Accepted
time: 63ms
memory: 10528kb

input:

1
30
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

343955582

result:

ok "343955582"

Test #22:

score: 0
Accepted
time: 22ms
memory: 5836kb

input:

1
25
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

242322220

result:

ok "242322220"

Test #23:

score: 0
Accepted
time: 3ms
memory: 4016kb

input:

1
20
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:

143388927

result:

ok "143388927"

Test #24:

score: 0
Accepted
time: 1ms
memory: 3536kb

input:

5
10
0 0 0 2 0 9 0 5 0 0
10
0 1 0 3 7 0 0 0 0 0
10
0 0 10 8 0 0 0 9 0 7
10
0 7 1 9 0 0 0 0 0 0
10
0 4 0 0 10 0 0 0 9 0

output:

5028
5000
719
5018
5034

result:

ok 5 tokens

Test #25:

score: 0
Accepted
time: 0ms
memory: 3408kb

input:

5
10
5 1 9 7 3 0 4 10 2 6
10
5 9 1 3 7 6 2 0 4 8
10
6 2 10 4 8 1 9 5 3 0
10
0 10 6 4 8 5 9 1 7 3
10
8 4 10 2 6 5 9 1 0 3

output:

0
0
0
0
0

result:

ok 5 tokens

Test #26:

score: 0
Accepted
time: 0ms
memory: 3352kb

input:

5
10
0 3 0 0 5 10 2 6 4 8
10
5 1 0 3 7 0 4 2 10 6
10
0 3 9 1 5 6 0 10 0 4
10
0 3 5 9 1 6 10 0 8 4
10
5 1 9 7 3 0 4 6 2 0

output:

4
1
5
1
1

result:

ok 5 tokens

Test #27:

score: 0
Accepted
time: 1ms
memory: 3536kb

input:

1
42
29 13 21 37 5 17 33 1 0 0 41 11 27 35 3 19 31 15 23 39 7 12 28 4 36 20 24 0 0 32 16 2 34 18 26 10 42 0 30 6 38 22

output:

118

result:

ok "118"

Test #28:

score: 0
Accepted
time: 0ms
memory: 3364kb

input:

1
42
37 5 21 13 29 17 1 33 25 9 41 3 35 0 0 27 23 0 7 31 15 32 16 8 40 24 0 0 20 28 0 30 0 0 38 22 10 0 0 0 0 18

output:

479001592

result:

ok "479001592"

Test #29:

score: 0
Accepted
time: 1ms
memory: 3356kb

input:

1
42
0 29 0 0 21 33 1 17 41 9 0 15 31 0 7 23 0 0 0 0 35 20 4 36 28 12 32 0 0 40 24 26 10 0 18 34 0 0 38 6 0 0

output:

789741538

result:

ok "789741538"

Test #30:

score: 0
Accepted
time: 2ms
memory: 3480kb

input:

1
42
0 0 25 0 1 33 0 0 0 29 0 0 0 35 0 0 7 39 0 31 0 0 42 0 0 0 2 0 38 22 14 0 0 0 0 0 28 24 0 0 0 0

output:

394131909

result:

ok "394131909"

Test #31:

score: -100
Time Limit Exceeded

input:

1
50
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

output:


result: