QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#551170#9245. Bracket Sequenceucup-team1004#WA 712ms126652kbC++142.7kb2024-09-07 15:47:212024-09-07 15:47:22

Judging History

This is the latest submission verdict.

  • [2024-09-07 15:47:22]
  • Judged
  • Verdict: WA
  • Time: 712ms
  • Memory: 126652kb
  • [2024-09-07 15:47:21]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,mod=998244353,K=40;
struct node{
	int op,l,r,k,id;
};
int n,Q,k,f[N][K+2][2],g[N][K+2][2],p[N],ans[N*10];
char str[N];
void Clr(vector<node> &q)
{
	vector<node> v;
	swap(v,q);
}
void pls(int &a,int b)
{
	if((a+=b)>=mod) a-=mod;
}
void clr(int l,int r)
{
	for(int i=l;i<=r;i++)
		for(int j=0;j<=K;j++)
			for(int k=0;k<2;k++)
				f[i][j][k]=g[i][j][k]=0;
}
void solve(int l,int r,vector<node> q)
{
	if(l==r||q.empty()) return;
	int mid=(l+r)>>1;
	vector<node> q1,q2,q3;
	for(auto k:q) if(k.r<=mid) q1.push_back(k);
	else if(k.l>mid) q2.push_back(k);
	else q3.push_back(k);
	Clr(q);
	solve(l,mid,q1),solve(mid+1,r,q2);
	for(int i=0;i<2;i++)
		f[mid+1][0][i]=g[mid][0][i]=1;
	for(int i=mid;i>=l;i--)
		for(int j=0;j<=K;j++)
		{
			pls(f[i][j+1][p[i]],f[i+1][j][p[i]^1]);
			pls(f[i][j][0],f[i+1][j][0]);
			pls(f[i][j][1],f[i+1][j][1]);
		}
	for(int i=mid+1;i<=r;i++)
		for(int j=0;j<=K;j++)
		{
			pls(g[i][j+1][p[i]],g[i-1][j][p[i]^1]);
			pls(g[i][j][0],g[i-1][j][0]);
			pls(g[i][j][1],g[i-1][j][1]);
		}
	for(auto k:q3)
		if(k.op==1)
		{
			int m=2*k.k;
			for(int j=0;j<=m;j++)
				pls(ans[k.id],1ll*f[k.l][j][0]*g[k.r][m-j][1]%mod);
		}
	for(int i=mid;i>=l;i--)
		for(int j=0;j<=K;j++)
			for(int p=0;p<2;p++)
				pls(f[i][j][p],f[i+1][j][p]);
	for(int i=mid+1;i<=r;i++)
		for(int j=0;j<=K;j++)
			for(int p=0;p<2;p++)
				pls(g[i][j][p],g[i-1][j][p]);
	for(auto k:q3)
		if(k.op==2)
		{
			int m=2*k.k;
			for(int j=0;j<=m;j++)
				pls(ans[k.id],1ll*f[k.l][j][0]*g[k.r][m-j][1]%mod);
		}
	clr(l,r);
	for(int i=l;i<=mid+1;i++)
		for(int j=0;j<2;j++) f[i][0][j]=1;
	for(int i=mid;i<r;i++)
		for(int j=0;j<2;j++) g[i][0][j]=1;
	for(int i=mid;i>=l;i--)
		for(int j=0;j<=K;j++)
		{
			pls(f[i][j+1][p[i]],f[i+1][j][p[i]^1]);
			pls(f[i][j][0],f[i+1][j][0]);
			pls(f[i][j][1],f[i+1][j][1]);
		}
	for(int i=mid+1;i<=r;i++)
		for(int j=0;j<=K;j++)
		{
			pls(g[i][j+1][p[i]],g[i-1][j][p[i]^1]);
			pls(g[i][j][0],g[i-1][j][0]);
			pls(g[i][j][1],g[i-1][j][1]);
		}
	for(int i=mid;i>=l;i--)
		for(int j=0;j<=K;j++)
			for(int p=0;p<2;p++)
				pls(f[i][j][p],f[i+1][j][p]);
	for(int i=mid+1;i<=r;i++)
		for(int j=0;j<=K;j++)
			for(int p=0;p<2;p++)
				pls(g[i][j][p],g[i-1][j][p]);
	for(auto k:q3)
		if(k.op==2)
		{
			int m=2*k.k,w=k.id;
			pls(ans[w],f[k.l][m][1]);
			pls(ans[w],f[k.r][m][1]);
		}
	clr(l,r);
}
int main()
{
	scanf("%d%d%s",&n,&Q,str+1);
	for(int i=1;i<=n;i++) p[i]=(str[i]==')');
	vector<node> q(Q);
	for(int i=0;i<Q;i++)
		scanf("%d%d%d%d",&q[i].op,&q[i].l,&q[i].r,&q[i].k),q[i].id=i;
	solve(1,n,q);
	for(int i=0;i<Q;i++) printf("%d\n",ans[i]);
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 7900kb

input:

5 20
(()()
1 1 2 1
1 1 3 1
1 1 4 1
1 1 5 1
1 2 3 1
1 2 4 1
1 2 5 1
1 3 4 1
1 3 5 1
1 4 5 1
2 1 3 1
2 1 4 1
2 1 5 1
2 2 3 1
2 2 4 1
2 2 5 1
2 3 5 1
2 4 5 1
1 1 5 2
2 1 5 2

output:

0
2
2
5
1
1
3
0
1
1
3
6
16
1
2
7
2
1
2
3

result:

ok 20 lines

Test #2:

score: -100
Wrong Answer
time: 712ms
memory: 126652kb

input:

100000 1000000
)())))))())()()()(())))()())))()))))())))))()(()()))()()))((()()))()))((())(())())()(()))))()))(()()()()()(())(()((()))()((()(()))()))()))()()))(())))()()(()(()())())((()((()((())()(()()))())(())())())))))))((())(((()(())())))(()(((())())))(((((((((()))()())())(()))(())()()()()((()())...

output:

807252937
829890608
763162857
122104482
597950507
624173655
49447025
390597667
392529556
736028324
426329153
45746899
315566541
444655931
76394527
216715407
286200843
254063326
378899437
302716489
498728925
1522883
869146157
78253278
848615832
448994141
605305965
30187019
340780822
960087454
6932240...

result:

wrong answer 2nd lines differ - expected: '333653009', found: '829890608'