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 |
|
|
| 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 |