Concurso para principiantes de AtCoder 179 D 题 解

Enlace de tema

Planteamiento del problema

Hay N celdas dispuestas en una fila, numeradas 1,2,…, N de izquierda a derecha.

Tak vive en estas celdas y actualmente se encuentra en la celda 1. Está tratando de llegar a la celda N mediante el procedimiento que se describe a continuación.

Se le da un entero K que es menor o igual a 10 y K segmentos que no se cruzan [L1, R1], [L2, R2], ……, [LK, RK]. Sea S la unión de estos K segmentos. Aquí, el segmento [l, r] denota el conjunto que consta de todos los enteros i que satisfacen l≤i≤r.

Cuando estés en la celda i, elige un número entero d de S y muévete a la celda i + d. No puedes salir de las celdas.

Para ayudar a Tak, encuentre la cantidad de formas de ir a la celda N, módulo 998244353.

Restricciones

2≤N≤2 × 105
1≤K≤min (N, 10)
1≤Li≤Ri≤N
[Li, Ri] y [Lj, Rj] no se cruzan (i ≠ j)
Todos los valores de entrada son números enteros.

Ideas

Sea dp [i] el número de soluciones de i, entonces dp [i] = dp [ir] + dp [i-r + 1] + …… + dp [il]. (Debido a que el rango de distancia recorrida es de 1 a r, las posiciones en el rango de ir a il cumplen con los requisitos actuales)
Para tales prefijos y matrices, use sum para registrar los resultados y sacar conclusiones rápidamente.

Código

#include<map>
#include<set>
#include<stack>
#include<queue>
#include<string>
#include<math.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define pb push_back
using namespace std;
const int mod=998244353;
const int maxn=1e6+5;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int minn=0xc0c0c0c0;
ll k,n,l[maxn],r[maxn],dp[maxn],sum[maxn];
int main()
{
    
    
    scanf("%lld%lld",&n,&k);
	for(int i=1;i<=k;i++)
		scanf("%lld%lld",&l[i],&r[i]);
	sum[1]=1;//dp[i]的前缀和 
	for(int i=2;i<=n;i++)
	{
    
    
		for(int j=1;j<=k;j++)
			dp[i]=(dp[i]+sum[max((ll)0,i-l[j])]-sum[max((ll)0,i-r[j]-1)])%mod;//走到i的方案数,注意防止越界情况
		sum[i]=(sum[i-1]+dp[i])%mod;
	}
	printf("%lld\n",(dp[n]+mod)%mod);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/WTMDNM_/article/details/108711236
Recomendado
Clasificación