Submission #45023731


Source Code Expand

#include<bits/stdc++.h>
#include<atcoder/all>

#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
using namespace atcoder;

const int MAXN = 2e5+10,LIM = 4e5+5;

using mint = modint998244353;
typedef vector<mint> Poly;

int n,p,a[MAXN],pre[MAXN];
string s;

mint f[MAXN],g[MAXN],ans;
mint fac[MAXN*2],rfac[MAXN*2];

int main(){
	cin>>s;n = s.length();
	rep(i,1,n)a[i] = s[i-1] - '0';
	for(p=1;p<n && a[p] <= a[p+1];p++);

	fac[0] = 1;rep(i,1,LIM)fac[i] = fac[i-1] * i;
	rep(i,0,LIM)rfac[i] = fac[i].inv();

	pre[p] = 100;rep(i,p+1,n)pre[i] = min(pre[i-1],a[i]);
	if(pre[n] <= a[1]){cout<<"0\n";exit(0);}

	f[n] = 1;
	for(int l=1,r,len,q=n;l<=p;l=r+1){
		for(r=l,len=1;r<p&&a[r+1]==a[l];r++,len++);
		rep(i,l,r-1)ans += f[i];
		for(int i=r,mn=100,cnt=0;i<=n && mn>a[l];i++,mn=min(mn,a[i]),cnt++){
			mint C = fac[cnt+len-1] * rfac[len-1] * rfac[cnt];
			ans += f[i] * C;
		}
		//
		while(q>=p && pre[q] <= a[l])q--;

		
		Poly A(n+1,0),B(n+1,0);
		rep(i,r+1,q)A[i] = f[i];
		rep(i,0,n)B[n-i] = fac[i+len-1] * rfac[i];
		A = convolution(A,B);
		rep(i,r+1,q)f[i] = A[n+i] * rfac[len-1];
	}

	cout<<ans.val()<<endl;
    return 0;
}

Submission Info

Submission Time
Task E - Deque Minimization
User Crying
Language C++ (GCC 9.2.1)
Score 800
Code Size 1499 Byte
Status AC
Exec Time 324 ms
Memory 16856 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 70
Set Name Test Cases
Sample 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt
All 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt, 02_small_rand_1_01.txt, 02_small_rand_1_02.txt, 02_small_rand_1_03.txt, 02_small_rand_1_04.txt, 02_small_rand_1_05.txt, 02_small_rand_1_06.txt, 02_small_rand_1_07.txt, 02_small_rand_1_08.txt, 02_small_rand_1_09.txt, 02_small_rand_1_10.txt, 03_small_rand_2_01.txt, 03_small_rand_2_02.txt, 03_small_rand_2_03.txt, 03_small_rand_2_04.txt, 03_small_rand_2_05.txt, 03_small_rand_2_06.txt, 03_small_rand_2_07.txt, 03_small_rand_2_08.txt, 03_small_rand_2_09.txt, 03_small_rand_2_10.txt, 04_max_rand_1_01.txt, 04_max_rand_1_02.txt, 04_max_rand_1_03.txt, 04_max_rand_1_04.txt, 04_max_rand_1_05.txt, 05_max_rand_2_01.txt, 05_max_rand_2_02.txt, 05_max_rand_2_03.txt, 05_max_rand_2_04.txt, 05_max_rand_2_05.txt, 05_max_rand_2_06.txt, 05_max_rand_2_07.txt, 05_max_rand_2_08.txt, 05_max_rand_2_09.txt, 05_max_rand_2_10.txt, 05_max_rand_2_11.txt, 05_max_rand_2_12.txt, 05_max_rand_2_13.txt, 05_max_rand_2_14.txt, 05_max_rand_2_15.txt, 05_max_rand_2_16.txt, 05_max_rand_2_17.txt, 05_max_rand_2_18.txt, 06_max_rand_3_01.txt, 06_max_rand_3_02.txt, 06_max_rand_3_03.txt, 06_max_rand_3_04.txt, 06_max_rand_3_05.txt, 06_max_rand_3_06.txt, 06_max_rand_3_07.txt, 06_max_rand_3_08.txt, 06_max_rand_3_09.txt, 06_max_rand_3_10.txt, 06_max_rand_3_11.txt, 06_max_rand_3_12.txt, 06_max_rand_3_13.txt, 06_max_rand_3_14.txt, 07_no_suffix_01.txt, 07_no_suffix_02.txt, 07_no_suffix_03.txt, 07_no_suffix_04.txt, 07_no_suffix_05.txt, 08_worst_01.txt, 08_worst_02.txt, 08_worst_03.txt, 08_worst_04.txt, 08_worst_05.txt
Case Name Status Exec Time Memory
01_sample_01.txt AC 57 ms 8244 KB
01_sample_02.txt AC 52 ms 8220 KB
01_sample_03.txt AC 54 ms 8316 KB
02_small_rand_1_01.txt AC 50 ms 8284 KB
02_small_rand_1_02.txt AC 49 ms 8188 KB
02_small_rand_1_03.txt AC 49 ms 8224 KB
02_small_rand_1_04.txt AC 53 ms 8312 KB
02_small_rand_1_05.txt AC 52 ms 8204 KB
02_small_rand_1_06.txt AC 53 ms 8188 KB
02_small_rand_1_07.txt AC 51 ms 8204 KB
02_small_rand_1_08.txt AC 52 ms 8184 KB
02_small_rand_1_09.txt AC 52 ms 8184 KB
02_small_rand_1_10.txt AC 49 ms 8228 KB
03_small_rand_2_01.txt AC 51 ms 8208 KB
03_small_rand_2_02.txt AC 51 ms 8220 KB
03_small_rand_2_03.txt AC 50 ms 8184 KB
03_small_rand_2_04.txt AC 50 ms 8248 KB
03_small_rand_2_05.txt AC 53 ms 8228 KB
03_small_rand_2_06.txt AC 52 ms 8204 KB
03_small_rand_2_07.txt AC 50 ms 8224 KB
03_small_rand_2_08.txt AC 53 ms 8224 KB
03_small_rand_2_09.txt AC 50 ms 8188 KB
03_small_rand_2_10.txt AC 55 ms 8248 KB
04_max_rand_1_01.txt AC 58 ms 9900 KB
04_max_rand_1_02.txt AC 55 ms 9884 KB
04_max_rand_1_03.txt AC 59 ms 9888 KB
04_max_rand_1_04.txt AC 58 ms 9812 KB
04_max_rand_1_05.txt AC 55 ms 9900 KB
05_max_rand_2_01.txt AC 91 ms 15308 KB
05_max_rand_2_02.txt AC 114 ms 15920 KB
05_max_rand_2_03.txt AC 143 ms 16512 KB
05_max_rand_2_04.txt AC 145 ms 16544 KB
05_max_rand_2_05.txt AC 147 ms 16656 KB
05_max_rand_2_06.txt AC 144 ms 16672 KB
05_max_rand_2_07.txt AC 146 ms 16580 KB
05_max_rand_2_08.txt AC 146 ms 16556 KB
05_max_rand_2_09.txt AC 200 ms 16628 KB
05_max_rand_2_10.txt AC 143 ms 16784 KB
05_max_rand_2_11.txt AC 145 ms 16620 KB
05_max_rand_2_12.txt AC 145 ms 16616 KB
05_max_rand_2_13.txt AC 172 ms 16640 KB
05_max_rand_2_14.txt AC 174 ms 16612 KB
05_max_rand_2_15.txt AC 146 ms 16672 KB
05_max_rand_2_16.txt AC 143 ms 16564 KB
05_max_rand_2_17.txt AC 173 ms 16616 KB
05_max_rand_2_18.txt AC 173 ms 16564 KB
06_max_rand_3_01.txt AC 144 ms 16156 KB
06_max_rand_3_02.txt AC 146 ms 16500 KB
06_max_rand_3_03.txt AC 171 ms 16148 KB
06_max_rand_3_04.txt AC 174 ms 16464 KB
06_max_rand_3_05.txt AC 204 ms 16260 KB
06_max_rand_3_06.txt AC 202 ms 16224 KB
06_max_rand_3_07.txt AC 233 ms 16336 KB
06_max_rand_3_08.txt AC 232 ms 16380 KB
06_max_rand_3_09.txt AC 261 ms 16260 KB
06_max_rand_3_10.txt AC 259 ms 16140 KB
06_max_rand_3_11.txt AC 291 ms 16376 KB
06_max_rand_3_12.txt AC 287 ms 16188 KB
06_max_rand_3_13.txt AC 319 ms 16260 KB
06_max_rand_3_14.txt AC 318 ms 16564 KB
07_no_suffix_01.txt AC 142 ms 15952 KB
07_no_suffix_02.txt AC 171 ms 15992 KB
07_no_suffix_03.txt AC 204 ms 15932 KB
07_no_suffix_04.txt AC 318 ms 15976 KB
07_no_suffix_05.txt AC 321 ms 15936 KB
08_worst_01.txt AC 324 ms 16716 KB
08_worst_02.txt AC 323 ms 16856 KB
08_worst_03.txt AC 320 ms 16720 KB
08_worst_04.txt AC 321 ms 16692 KB
08_worst_05.txt AC 321 ms 16800 KB