QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#482480 | #4222. 题 | bai_hong | 100 ✓ | 259ms | 727432kb | C++14 | 2.6kb | 2024-07-17 19:44:16 | 2024-07-17 19:44:17 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define R register
const int mod=1e9+7;
using namespace std;
inline int read(){
int x=0,f=1; char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar())
if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar())
x=(x<<1)+(x<<3)+(ch^48);
return x*f;
}
int T,n,f[2][21][21][21][21][21][21],cur,m,p; char ch[60];
void init(int x){ m=((__int128)1<<64)/x,p=x; }
void Mod(int &x){ x=x-(__int128(x)*m>>64)*p; }
inline void sol(const int &x){
for (R int i=0;i<=n;i++)
for (R int j=0;i+j<=n;j++)
for (R int k=0;i+j+k<=n;k++)
for (R int a=0;i+j+k+a<=n;a++)
for (R int b=0;i+j+k+a+b<=n;b++)
for (R int c=0;i+j+k+a+b+c<=n;c++)
switch (x){
case 1:{
f[cur][i][j][k][a][b][c]=
(i ? f[cur^1][i-1][j][k][a][b][c]:0)+
(a ? f[cur^1][i][j+1][k][a-1][b][c]*(j+1):0)+
f[cur^1][i][j][k][a][b][c+1]*(c+1);
break;
}
case 2:{
f[cur][i][j][k][a][b][c]=
(j ? f[cur^1][i][j-1][k][a][b][c]:0)+
(c ? f[cur^1][i][j][k+1][a][b][c-1]*(k+1):0)+
f[cur^1][i][j][k][a][b+1][c]*(b+1);
break;
}
case 3:{
f[cur][i][j][k][a][b][c]=
(k ? f[cur^1][i][j][k-1][a][b][c]:0)+
(b ? f[cur^1][i+1][j][k][a][b-1][c]*(i+1):0)+
f[cur^1][i][j][k][a+1][b][c]*(a+1);
break;
}
default:{
f[cur][i][j][k][a][b][c]=
(i ? f[cur^1][i-1][j][k][a][b][c]:0)+
(a ? f[cur^1][i][j+1][k][a-1][b][c]*(j+1):0)+
f[cur^1][i][j][k][a][b][c+1]*(c+1)+
(j ? f[cur^1][i][j-1][k][a][b][c]:0)+
(c ? f[cur^1][i][j][k+1][a][b][c-1]*(k+1):0)+
f[cur^1][i][j][k][a][b+1][c]*(b+1)+
(k ? f[cur^1][i][j][k-1][a][b][c]:0)+
(b ? f[cur^1][i+1][j][k][a][b-1][c]*(i+1):0)+
f[cur^1][i][j][k][a+1][b][c]*(a+1);
}
}
}
inline void modf(){
for (R int i=0;i<=n;i++)
for (R int j=0;i+j<=n;j++)
for (R int k=0;i+j+k<=n;k++)
for (R int a=0;i+j+k+a<=n;a++)
for (R int b=0;i+j+k+a+b<=n;b++)
for (R int c=0;i+j+k+a+b+c<=n;c++)
Mod(f[cur][i][j][k][a][b][c]);
}
inline void all_clear(){
for (R int i=0;i<=n+1;i++)
for (R int j=0;i+j<=n+1;j++)
for (R int k=0;i+j+k<=n+1;k++)
for (R int a=0;i+j+k+a<=n+1;a++)
for (R int b=0;i+j+k+a+b<=n+1;b++)
for (R int c=0;i+j+k+a+b+c<=n+1;c++)
f[1][i][j][k][a][b][c]=f[0][i][j][k][a][b][c]=0;
}
signed main(){
init(mod);
for (T=read();T--;){
n=read(),scanf("%s",ch+1);
all_clear(),cur=0;
f[cur][0][0][0][0][0][0]=1;
int fnc=1;
for (R int i=1;i<=3*n;i++){
if (i<=n) fnc=fnc*i%mod;
cur^=1,sol(ch[i]-'0');
if (i%3==0) modf();
}
printf("%lld\n",f[cur][0][0][0][0][0][0]*fnc%mod);
}
return 0;
}
详细
Test #1:
score: 10
Accepted
time: 4ms
memory: 26308kb
input:
5 1 123 1 100 1 000 1 300 1 010
output:
0 1 3 1 1
result:
ok 5 lines
Test #2:
score: 10
Accepted
time: 0ms
memory: 36548kb
input:
5 1 303 2 000320 2 002000 2 002020 2 020020
output:
0 36 60 12 12
result:
ok 5 lines
Test #3:
score: 10
Accepted
time: 0ms
memory: 51200kb
input:
5 2 110133 3 200010000 3 002002200 3 300000000 3 000000130
output:
0 5940 540 15120 7560
result:
ok 5 lines
Test #4:
score: 10
Accepted
time: 3ms
memory: 94128kb
input:
5 5 000000000000000 4 000000000000 3 000000000 2 000000 1 000
output:
864823720 29937600 45360 180 3
result:
ok 5 lines
Test #5:
score: 10
Accepted
time: 0ms
memory: 143604kb
input:
5 6 000121310223223210 7 033221120002010100230 7 000003020000010302010 7 000010002020302300100 7 030100002033300000000
output:
26853120 152413083 939384999 4309685 970165754
result:
ok 5 lines
Test #6:
score: 10
Accepted
time: 7ms
memory: 252148kb
input:
5 9 120332011311030220200103301 10 200003200103011232000202201120 10 000000201330030030101000003000 10 020000002032000000200000100002 10 100200322001000000320000002010
output:
963757075 290911546 487693965 730680478 984422198
result:
ok 5 lines
Test #7:
score: 10
Accepted
time: 16ms
memory: 381240kb
input:
5 13 000000000000000000000000000000000000000 12 000000000000000000000000000000000000 11 000000000000000000000000000000000 10 000000000000000000000000000000 9 000000000000000000000000000
output:
856865849 574346463 607449787 883895867 88660419
result:
ok 5 lines
Test #8:
score: 10
Accepted
time: 107ms
memory: 538364kb
input:
5 15 331110203302222220331213331310312220103030021 16 001301022200100032010330002213000300220033210033 16 020002030002000330003200030010000000000100002300 16 320000001003222000003000003000300010323113200020 16 000203000000000000010100000000000000002000210000
output:
70336694 482512438 740138646 212387388 427674884
result:
ok 5 lines
Test #9:
score: 10
Accepted
time: 195ms
memory: 657744kb
input:
5 17 221001103220113003322101120223031133120301212031002 18 201000020000000010323100000333030002012000213100030001 18 013203020100001021200030003102000130000002330303302120 18 010003030200000200100000002000000000000302000203103300 18 000001000132020000200321023010000000000000000132210300
output:
821788453 589132243 303959134 648206569 571580782
result:
ok 5 lines
Test #10:
score: 10
Accepted
time: 259ms
memory: 727432kb
input:
5 18 331110100201233220121012022130200011112133012123201012 19 221011310310012302220013020123002132313030023020101110230 19 202000300003001300011000011021320001000300320020302022103 19 010030200000000000300300310000001302002000010230000330020 19 000000000000031000000000131200020001000020000001020000...
output:
171958822 242716134 229925968 914555153 59496792
result:
ok 5 lines
Extra Test:
score: 0
Extra Test Passed