QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#828443#9245. Bracket SequenceNityackeWA 780ms124352kbC++202.1kb2024-12-23 16:41:122024-12-23 16:41:13

Judging History

This is the latest submission verdict.

  • [2024-12-23 16:41:13]
  • Judged
  • Verdict: WA
  • Time: 780ms
  • Memory: 124352kb
  • [2024-12-23 16:41:12]
  • Submitted

answer

#include<bits/stdc++.h>
#define pb push_back
#define Qry array<int,5>
using namespace std;
const int N=1e5+5,K=45,H=998244353;
int n,m,a[N],ans[N*10],f[N][K][2],g[N][K][2];
inline void add(int &x,int y){if((x+=y)>=H) x-=H;}
inline void clear(int l,int r){
	for(int i=l;i<=r;++i)
		for(int j=0;j<=40;++j) for(int c=0;c<2;++c) f[i][j][c]=g[i][j][c]=0;
}
inline void dp(int l,int mid,int r){
	for(int i=mid;i>=l;--i)
		for(int j=0;j<=40;++j)
			add(f[i][j+1][a[i]],f[i+1][j][!a[i]]),add(f[i][j][0],f[i+1][j][0]),add(f[i][j][1],f[i+1][j][1]);
	for(int i=mid+1;i<=r;++i)
		for(int j=0;j<=40;++j)
			add(g[i][j+1][a[i]],g[i-1][j][!a[i]]),add(g[i][j][0],g[i-1][j][0]),add(g[i][j][1],g[i-1][j][1]);
}
inline void Pre(int l,int mid,int r){
	for(int i=mid;i>=l;--i)
		for(int j=0;j<=40;++j) for(auto c:{0,1}) add(f[i][j][c],f[i+1][j][c]);
	for(int i=mid+1;i<=r;++i)
		for(int j=0;j<=40;++j) for(auto c:{0,1}) add(g[i][j][c],g[i-1][j][c]);
}
inline void solve(int l,int r,vector<Qry>&Q){
	if(l==r||!Q.size()) return;
	vector<Qry>ql,qr,vec;
	int mid=(l+r)>>1;
	for(auto v:Q)
		if(v[2]<=mid) ql.pb(v);
		else if(v[1]>mid) qr.pb(v);
		else vec.pb(v);
	Q.clear(),solve(l,mid,ql),solve(mid+1,r,qr);
	if(!vec.size()) return;
	clear(l,r);
	for(auto c:{0,1}) f[mid+1][0][c]=g[mid][0][c]=1;
	dp(l,mid,r);
	for(auto v:vec) if(v[0]==1){
			int nd=v[3]<<1;
			for(int j=0;j<=nd;++j)
				add(ans[v[4]],1ll*f[v[1]][j][0]*g[v[2]][nd-j][1]%H);
		}
	Pre(l,mid,r);
	for(auto v:vec) if(v[0]==2){
			int nd=v[3]<<1;
			for(int j=0;j<=nd;++j)
				add(ans[v[4]],1ll*f[v[1]][j][0]*g[v[2]][nd-j][1]%H);
		}
	clear(l,r);
	for(int i=mid;i>=l;i--) for(int c:{0,1}) f[i][0][c]=1;
	for(int i=mid+1;i<=r;i++) for(int c:{0,1}) g[i][0][c]=1;
	dp(l,mid,r),Pre(l,mid,r);
	for(auto v:vec)
		if(v[0]==2) add(ans[v[4]],f[v[1]][v[3]<<1][0]),add(ans[v[4]],f[v[2]][v[3]<<1][1]);
}
vector<Qry>Q;
char C;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m,Q.resize(m);
	for(int i=1;i<=n;++i) cin>>C,a[i]=(C==')');
	for(int op,l,r,k,i=0;i<m;++i) cin>>op>>l>>r>>k,Q[i]={op,l,r,k,i};
	solve(1,n,Q);
	for(int i=0;i<m;++i) cout<<ans[i]<<"\n";
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 780ms
memory: 124352kb

input:

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

output:

807252937
606928536
88031079
122104482
597950507
716633829
810056267
719234156
392529556
736028324
426329153
576581877
315566541
444655931
76394527
216715407
31336797
926955022
529925464
302716489
498728925
1522883
192687717
78253278
690761534
503000238
605305965
33700395
340780822
88050137
23962861...

result:

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