Segunda pregunta de Pascal del grupo de popularización NOIP2012
tesoro del programa;
var a:array[1..10000,0..99] of longint; //etiqueta de indicación de la sala de procesamiento de matriz bidimensional, a[i, j] representa el número de instrucción en la j-ésima habitación en el i-ésimo piso.
lt: array[1..10000, 0..99]
of 0..1; //Determina si hay escaleras en la habitación actual.
tn: entero;
i, j, temp1, temp2, n, m, inicio: longint; /p>
procedure sta; // Maneja la situación cuando el subíndice del anillo de Joseph cruza el límite.
comenzar
inc(inicio);
si (iniciogt; m-1) entonces
inicio:=0; p>
p>
fin;
comenzar
assign(input,'treasure.in');
reset(input);
asignar(salida,'tesoro.out');
reescribir(salida);
readln(n, m);
para i:= 1 a n hacer
para j:=0 a m-1 hacer
comenzar
temp1:=0;
temp2: =0;
readln(temp1, temp2);
lt[i,j]:=temp1;
a[i, j]:=temp2 ;
end;
readln(start);
ans:=0; //Inicialización del contador.
tn:=1; //El número de capa actual se inicializa a 1, comenzando desde la capa 1
repetir
x:=0;
si
a[tn, start]gt;=20123 entonces
ans:=ans (a[tn, start]
mod 20123 )
else
ans: =ans a[tn, start]; //Si es mayor o igual a 20123, tome primero el módulo de 20123.
if lt[tn, start]=1 then //Si la habitación actual ya tiene escaleras, entonces el número de veces es x-1, el inicio 1 comienza desde la siguiente habitación. Esto debe escribirse como while lt[tn, start[=1
do para procesar un montón de unos consecutivos en la habitación después del inicio. .
comenzar
a[tn, inicio]:=a[tn, inicio]-1
sta
fin;
x:=a[tn, start];
if xlt; gt; 0 then // Si los tiempos restantes no son 0, realiza un ciclo de Joseph.
mientras xlt;gt;0
hacer
comenzar
si
lt[tn, iniciar] =1 entonces
comenzar
x:=x-1;
if
xlt 0 entonces //Cuando el restante Cuando el número de veces no sea igual a 0, comience desde la siguiente habitación.
Si es igual a 0, avance según los requisitos de la pregunta, no establezca el inicio en 1.
sta;
end
else sta;
end;
inc(tn); p>
inc(tn);
p>
hasta tngt;n;
si ansgt;=20123 entonces
ans:= ans mod 20123;// Si el último dato aún es mayor que 20123, hazlo de nuevo. Toma el molde. (Por ejemplo, cuando n = 2, los dos valores de habitación 20122 y 20121 no son mayores o iguales que 20123, pero la suma es mayor que 20123).
write(ans); p>
cerrar(entrada);
cerrar(salida);
fin.