Número de Cattleya,

Enlace: https://ac.nowcoder.com/acm/contest/11356/I
Fuente: Niuke

Para que no seamos el significado de las cartas de las preguntas, aquí hay un significado del tema:
Dado un límite de profundidad de la secuencia de pila no apilada A_1, A_2, A_3, \ cdots, A_NA
1 , A 2 , A 3 , ⋯, a N y A_1A . 1 no es el primero en salir. Encuentra el número de secuencias pop legales. La respuesta es el módulo 998244353998244353. Descripción de entrada: un número TT en la primera línea significa que Frog tiene una consulta de grupo TT. Siguiendo las líneas TT, cada línea tiene un número entero positivo NN, que representa el número de destinos (número de elementos insertados en la pila). Descripción de la salida : genera un total de líneas TT, cada línea tiene una respuesta, el formato es similar, consulte el ejemplo para obtener más detalles. La respuesta puede ser más grande, envíela después del módulo 998244353998244353. Ejemplo 1 Copia de entrada 3 3 9 24 Copia de salida Caso n. ° 1: 3 Caso n. ° 2: 3432 Caso n. ° 3: 508887030 Descripción

































Para la primera consulta de la muestra, configure los tres destinos como AA, BB y CC, donde AA es el primer destino, por lo que no se puede acceder a él primero. Hay tres secuencias de acceso legales:
· B, A, CB, A, C
· B, C, AB, C, A
· C, B, AC, B, A
Observaciones:
1 \ leq T \ leq 2001≤T≤200
1 \ leq N \ leq 10 ^ 51≤N≤10
5

A1 no se puede abrir primero.
Todo el orden de aparición es el número N. ° de Cattelan.
Si A1 se abre primero, entonces todo el orden de aparición es (N-1) número de Cattelan,
por lo que todo el orden de reproducción disponible es H (N) -H (N-1)

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

#define int long long

const int mod = 998244353;

int qmi(int a, int b, int mod){
    
    
	int res = 1 % mod;
	while(b){
    
    
		if (b & 1)   res = res * a % mod;
		a = a * a % mod;
		b >>= 1;
	}
	return res;
}

int C(int a, int b){
    
    
	int ans = 1, res = 1;
	for (int i = a, j = 1; j <= b; i --, j ++){
    
    
		ans = ans * i % mod;
		res = res * j % mod;
	}
	
	return (ans * qmi(res, mod - 2, mod) % mod) % mod;
}

signed main(){
    
    
	int T;
	scanf("%lld", &T);
	
	int t = 1;
	while(T --){
    
    
		int n;
		scanf("%lld", &n);
		
		int ans =  (C(2 * n, n) * qmi(n + 1, mod - 2, mod) % mod - C(2 * n - 2, n - 1) * qmi(n, mod - 2, mod) % mod % mod + mod) % mod;
		  printf("Case #%lld: %lld\n", t ++, ans);
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/112596735
Recomendado
Clasificación