Submission #64376983


Source Code Expand

#include <bits/stdc++.h>
#pragma GCC target ("avx2,fma")
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")

#define int long long
#define ll long long
#define ld long double
#define endl '\n'
#define st first
#define nd second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define ROF(i,r,l) for(int i=(r);i>=(l);i--)
using namespace std;
int inf=1000000000000000007;
int mod=998244353;
int mod1=998244353;

#ifdef DEBUG
auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";}
#define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X)
#else
#define debug(...){}
#endif


const int N=10000007;

int fac[2*N];
int inv[2*N];
int P[2*N];
 
int pot(int x,int p) {int res=1;for(;p;p>>=1) {if(p&1) res=res*x%mod; x=x*x%mod;} return res;}
int npok(int n,int k)
{
    if(min(k,n)<0||k>n) return 0;
    return fac[n]*inv[k]%mod*inv[n-k]%mod;
}

int nx[500007];
int pref[500007];

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,k;
    cin>>n>>k;
    fac[0]=1,P[0]=1;
    for(int i=1;i<=n+3*k+7;i++)
    {
		fac[i]=fac[i-1]*i%mod;
		P[i]=P[i-1]*2%mod;
	}
    inv[n+3*k+7]=pot(fac[n+3*k+7],mod-2);
    for(int i=n+3*k+7-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
    n-=k;
    string s;
    cin>>s;
    s='#'+s;
    vector<int>V;
    FOR(i,1,k)
    {
		if(s[i]==')'&&sz(V)>0)
		{
			nx[V.back()]=i;
			pref[V.back()]=1;
			V.pop_back();
		}
		else if(s[i]=='(') V.pb(i);
	}
	vector<int>W;
	FOR(i,1,k) pref[i]+=pref[i-1];
    FOR(i,1,k)
    {
		if(nx[i]>0)
		{
			if(pref[nx[i]]-pref[i-1]==1) W.pb(1);
			else W.pb(2);
			i=nx[i];
		}
	}
	int f=-1;
	FOR(i,0,sz(W)-1) if(f==-1&&W[i]==2) f=i;
	int ans=0,m=sz(W);
	if(f==-1)
	{
		FOR(x,0,n) ans=(ans+P[x]*npok(2*m-1+n-x,n-x))%mod;
	}
	else
	{
		ans=npok(2*(f+1)+m-f-1+n,n);
		ans=(ans+(m-f)*npok(2*(f+1)+m-f+n-1,n-1))%mod;
	}
    cout<<ans<<endl;
    
    return 0;
}

Submission Info

Submission Time
Task B - Maximum Bracket Subsequence
User Rafi22
Language C++ 20 (gcc 12.2)
Score 900
Code Size 2219 Byte
Status AC
Exec Time 327 ms
Memory 283552 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 4
AC × 63
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_random_case_01.txt, 01_random_case_02.txt, 01_random_case_03.txt, 01_random_case_04.txt, 01_random_case_05.txt, 01_random_case_06.txt, 01_random_case_07.txt, 01_random_case_08.txt, 01_random_case_09.txt, 01_random_case_10.txt, 01_random_case_11.txt, 01_random_case_12.txt, 01_random_case_13.txt, 01_random_case_14.txt, 01_random_case_15.txt, 01_random_case_16.txt, 02_simple_case_01.txt, 02_simple_case_02.txt, 02_simple_case_03.txt, 02_simple_case_04.txt, 02_simple_case_05.txt, 02_simple_case_06.txt, 02_simple_case_07.txt, 02_simple_case_08.txt, 02_simple_case_09.txt, 02_simple_case_10.txt, 02_simple_case_11.txt, 02_simple_case_12.txt, 03_max_case_01.txt, 03_max_case_02.txt, 03_max_case_03.txt, 03_max_case_04.txt, 03_max_case_05.txt, 03_max_case_06.txt, 03_max_case_07.txt, 03_max_case_08.txt, 03_max_case_09.txt, 03_max_case_10.txt, 03_max_case_11.txt, 03_max_case_12.txt, 03_max_case_13.txt, 03_max_case_14.txt, 03_max_case_15.txt, 03_max_case_16.txt, 03_max_case_17.txt, 03_max_case_18.txt, 03_max_case_19.txt, 03_max_case_20.txt, 04_corner_01.txt, 04_corner_02.txt, 04_corner_03.txt, 04_corner_04.txt, 04_corner_05.txt, 04_corner_06.txt, 05_handmade_01.txt, 05_handmade_02.txt, 05_handmade_03.txt, 05_handmade_04.txt, 05_handmade_05.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 1 ms 3600 KiB
00_sample_02.txt AC 1 ms 3392 KiB
00_sample_03.txt AC 1 ms 3592 KiB
00_sample_04.txt AC 204 ms 237896 KiB
01_random_case_01.txt AC 71 ms 84360 KiB
01_random_case_02.txt AC 107 ms 128252 KiB
01_random_case_03.txt AC 88 ms 104580 KiB
01_random_case_04.txt AC 119 ms 141220 KiB
01_random_case_05.txt AC 123 ms 146720 KiB
01_random_case_06.txt AC 104 ms 125636 KiB
01_random_case_07.txt AC 51 ms 63552 KiB
01_random_case_08.txt AC 229 ms 270172 KiB
01_random_case_09.txt AC 64 ms 78300 KiB
01_random_case_10.txt AC 80 ms 97444 KiB
01_random_case_11.txt AC 111 ms 132892 KiB
01_random_case_12.txt AC 88 ms 105632 KiB
01_random_case_13.txt AC 168 ms 197292 KiB
01_random_case_14.txt AC 130 ms 155224 KiB
01_random_case_15.txt AC 67 ms 82268 KiB
01_random_case_16.txt AC 202 ms 239608 KiB
02_simple_case_01.txt AC 84 ms 101744 KiB
02_simple_case_02.txt AC 81 ms 97180 KiB
02_simple_case_03.txt AC 122 ms 145896 KiB
02_simple_case_04.txt AC 104 ms 125472 KiB
02_simple_case_05.txt AC 151 ms 179544 KiB
02_simple_case_06.txt AC 83 ms 99656 KiB
02_simple_case_07.txt AC 172 ms 203256 KiB
02_simple_case_08.txt AC 224 ms 263040 KiB
02_simple_case_09.txt AC 153 ms 181088 KiB
02_simple_case_10.txt AC 194 ms 229060 KiB
02_simple_case_11.txt AC 176 ms 207160 KiB
02_simple_case_12.txt AC 136 ms 161848 KiB
03_max_case_01.txt AC 241 ms 283552 KiB
03_max_case_02.txt AC 240 ms 283352 KiB
03_max_case_03.txt AC 239 ms 283452 KiB
03_max_case_04.txt AC 241 ms 283368 KiB
03_max_case_05.txt AC 240 ms 283468 KiB
03_max_case_06.txt AC 241 ms 283452 KiB
03_max_case_07.txt AC 241 ms 283424 KiB
03_max_case_08.txt AC 243 ms 283348 KiB
03_max_case_09.txt AC 241 ms 283400 KiB
03_max_case_10.txt AC 241 ms 283460 KiB
03_max_case_11.txt AC 242 ms 283384 KiB
03_max_case_12.txt AC 239 ms 283544 KiB
03_max_case_13.txt AC 240 ms 283484 KiB
03_max_case_14.txt AC 243 ms 283368 KiB
03_max_case_15.txt AC 242 ms 283504 KiB
03_max_case_16.txt AC 241 ms 283304 KiB
03_max_case_17.txt AC 241 ms 283388 KiB
03_max_case_18.txt AC 241 ms 283468 KiB
03_max_case_19.txt AC 245 ms 283396 KiB
03_max_case_20.txt AC 243 ms 283304 KiB
04_corner_01.txt AC 273 ms 230724 KiB
04_corner_02.txt AC 263 ms 217076 KiB
04_corner_03.txt AC 124 ms 117432 KiB
04_corner_04.txt AC 312 ms 270740 KiB
04_corner_05.txt AC 92 ms 81940 KiB
04_corner_06.txt AC 49 ms 50252 KiB
05_handmade_01.txt AC 1 ms 3524 KiB
05_handmade_02.txt AC 1 ms 3508 KiB
05_handmade_03.txt AC 205 ms 238024 KiB
05_handmade_04.txt AC 327 ms 283332 KiB
05_handmade_05.txt AC 245 ms 283392 KiB