QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#288201#6333. Festivals in JOI Kingdom 2DaiRuiChen007100 ✓3976ms5672kbC++141.7kb2023-12-22 10:15:212023-12-22 10:15:21

Judging History

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

  • [2023-12-22 10:15:21]
  • 评测
  • 测评结果:100
  • 用时:3976ms
  • 内存:5672kb
  • [2023-12-22 10:15:21]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=40005;
int n,MOD,dp[2][MAXN][3],f[MAXN][3],g[MAXN][3];
ll fac[MAXN],ifac[MAXN];
/*
 * dp[i,j,k]: 1~i, now j free bracket for OPT,
 * k=0: |FAKE|=|OPT|, FAKE no free bracket
 * k=1: |FAKE|=|OPT|, FAKE have free bracket
 * K=2: |FAKE|=|OPT|-1, FAKE have free bracket
 * f[j,k]: have j useless free bracket
 * g[i,k]: dp[i,0,k] += g[i,k] (deal with useless bracket in f[])
 */
void add(int &x,int y) { x=(x+y>=MOD)?x+y-MOD:x+y; }
void addl(int &x,ll y) { x=(x+y)%MOD; }
ll ksm(ll a,int b=MOD-2,int p=MOD) {
	ll ret=1;
	for(;b;a=a*a%p,b=b>>1) if(b&1) ret=ret*a%p;
	return ret;
}
ll C(int x,int y) { return fac[x]*ifac[x-y]%MOD; } //x place y
signed main() {
	scanf("%d%d",&n,&MOD),n<<=1;
	for(int i=fac[0]=ifac[0]=1;i<=n;++i) ifac[i]=ksm(fac[i]=i*fac[i-1]%MOD);
	dp[0][0][0]=1;
	for(int i=0;i<n;++i) {
		int cur=i&1,J=min(i,n-i);
		auto &F=dp[cur^1],&G=dp[cur];
		for(int j=0;j<=J;++j) { //left bracket
			if(G[j][0]) add(F[j+1][1],G[j][0]);
			if(G[j][1]) add(F[j+1][1],G[j][1]);
			if(G[j][2]) add(F[j+1][2],G[j][2]);
		}
		for(int j=0;j<=J;++j) { //right bracket
			if(G[j][1]) {
				if(j>0) add(f[j-1][0],G[j][1]);
					//match with FAKE's bracket
				if(j>1) addl(f[j-2][2],1ll*(j-1)*G[j][1]);
					//match other bracket
			}
			if(G[j][2]) add(F[j][0],G[j][2]); //match FAKE's bracket
		}
		for(int j=0;j<=J;++j) {
			if(f[j][0]) addl(g[i+1+j][0],C(n-i-1,j)*f[j][0]);
			if(f[j][2]) addl(g[i+1+j][2],C(n-i-1,j)*f[j][2]);
		}
		add(F[0][0],g[i+1][0]),add(F[0][2],g[i+1][2]);
		for(int j=0;j<=J;++j) G[j][0]=G[j][1]=G[j][2]=f[j][0]=f[j][2]=0;
	}
	ll tot=1;
	for(int i=1;i<=n;i+=2) tot=tot*i%MOD;
	printf("%lld\n",(tot+MOD-dp[0][0][0])%MOD);
	return 0;
}

详细

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 1ms
memory: 3844kb

input:

1 194903119

output:

0

result:

ok 1 number(s): "0"

Test #2:

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

input:

2 933234047

output:

0

result:

ok 1 number(s): "0"

Test #3:

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

input:

3 277793111

output:

2

result:

ok 1 number(s): "2"

Test #4:

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

input:

4 355321177

output:

28

result:

ok 1 number(s): "28"

Test #5:

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

input:

5 306636893

output:

358

result:

ok 1 number(s): "358"

Subtask #2:

score: 5
Accepted

Dependency #1:

100%
Accepted

Test #6:

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

input:

8 361605653

output:

1236922

result:

ok 1 number(s): "1236922"

Test #7:

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

input:

8 995512643

output:

1236922

result:

ok 1 number(s): "1236922"

Test #8:

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

input:

8 101102801

output:

1236922

result:

ok 1 number(s): "1236922"

Test #9:

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

input:

6 458322727

output:

4894

result:

ok 1 number(s): "4894"

Test #10:

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

input:

7 721691819

output:

73884

result:

ok 1 number(s): "73884"

Test #11:

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

input:

7 370629137

output:

73884

result:

ok 1 number(s): "73884"

Subtask #3:

score: 27
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Test #12:

score: 27
Accepted
time: 0ms
memory: 3648kb

input:

30 779092367

output:

686412377

result:

ok 1 number(s): "686412377"

Test #13:

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

input:

29 963995171

output:

128570082

result:

ok 1 number(s): "128570082"

Test #14:

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

input:

18 666092701

output:

185922458

result:

ok 1 number(s): "185922458"

Test #15:

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

input:

14 671243719

output:

623913899

result:

ok 1 number(s): "623913899"

Subtask #4:

score: 14
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Test #16:

score: 14
Accepted
time: 0ms
memory: 3680kb

input:

300 463478027

output:

89265245

result:

ok 1 number(s): "89265245"

Test #17:

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

input:

296 567610679

output:

406342763

result:

ok 1 number(s): "406342763"

Test #18:

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

input:

297 609090359

output:

128986577

result:

ok 1 number(s): "128986577"

Test #19:

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

input:

48 759569383

output:

635573072

result:

ok 1 number(s): "635573072"

Test #20:

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

input:

99 298873033

output:

285340078

result:

ok 1 number(s): "285340078"

Subtask #5:

score: 36
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Test #21:

score: 36
Accepted
time: 90ms
memory: 3856kb

input:

3000 752129633

output:

33058561

result:

ok 1 number(s): "33058561"

Test #22:

score: 0
Accepted
time: 90ms
memory: 3916kb

input:

2993 491173567

output:

343277625

result:

ok 1 number(s): "343277625"

Test #23:

score: 0
Accepted
time: 91ms
memory: 4148kb

input:

2993 783095563

output:

776085006

result:

ok 1 number(s): "776085006"

Test #24:

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

input:

327 399783431

output:

163535283

result:

ok 1 number(s): "163535283"

Test #25:

score: 0
Accepted
time: 16ms
memory: 3756kb

input:

1233 857060207

output:

422139845

result:

ok 1 number(s): "422139845"

Test #26:

score: 0
Accepted
time: 10ms
memory: 3700kb

input:

1114 600227447

output:

598509129

result:

ok 1 number(s): "598509129"

Subtask #6:

score: 13
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

100%
Accepted

Test #27:

score: 13
Accepted
time: 3970ms
memory: 5524kb

input:

20000 221054167

output:

39809956

result:

ok 1 number(s): "39809956"

Test #28:

score: 0
Accepted
time: 3976ms
memory: 5432kb

input:

19997 823974001

output:

267537750

result:

ok 1 number(s): "267537750"

Test #29:

score: 0
Accepted
time: 3969ms
memory: 5672kb

input:

19991 501689843

output:

16527909

result:

ok 1 number(s): "16527909"

Test #30:

score: 0
Accepted
time: 2053ms
memory: 5136kb

input:

14344 925452091

output:

212324779

result:

ok 1 number(s): "212324779"

Test #31:

score: 0
Accepted
time: 368ms
memory: 4196kb

input:

6098 507350869

output:

310480789

result:

ok 1 number(s): "310480789"

Test #32:

score: 0
Accepted
time: 309ms
memory: 4300kb

input:

5564 406069759

output:

105694337

result:

ok 1 number(s): "105694337"

Extra Test:

score: 0
Extra Test Passed