解题思路:
先读入数据,用三个数组分别储存每间房牌子上的数字、每间房可不可以通往上层和每层楼有多少个可以通往上层的房,然后用循环模拟,先加上该房间里牌子上的数,然后用
repeat
模拟在该层楼转圈。最后输出
ans mod 20123
的值即可。
程序:
const
maxn=10000;
maxm=100;
var
a:array[1..maxn,0..maxm]of longint;
f:array[1..maxn,0..maxm]of boolean;
d:array[1..maxn] of longint;
n,m,start:longint;
ans:int64;
procedure init;
var
i,j,x:longint;
begin
//assign(input,'treasure,in');reset(input);
// assign(output,'treasure.out');rewrite(output);
readln(n,m);
fillchar(a,sizeof(a),0);
fillchar(f,sizeof(f),false);
for i:=1 to n do
for j:=1 to m do
begin
readln(x,a[i,j-1]);
if x=1 then begin f[i,j-1]:=true; inc(d[i]); end;
end;
readln(start);
//close(input);
end;
procedure main;
var
i,j,nown,nowm,t,x:longint;
begin
nown:=1;
nowm:=start;
t:=0;
for i:=1 to n do
begin
ans:=ans+a[nown,nowm];
x:=(a[nown,nowm]-1) mod d[i]+1;
repeat
if (f[nown,nowm]=false) then inc(nowm);
if f[nown,nowm] then begin inc(t); if t=x then break; inc(nowm); end;
if nowm=m then nowm:=0;
until t=x;
t:=0;
inc(nown);
end;
ans:=ans mod 20123;
writeln(ans);
//close(output);
end;
begin
init;
main;
end.
版权属于: Chris
转载时必须以链接形式注明原始出处及本声明。