傳說很遙遠的藏寶樓頂層藏着誘人的寶藏。小明歷盡千辛萬苦終於找到傳說中的這個藏寶樓,藏寶樓的門口豎着一個木板,上面寫有幾個大字:尋寶說明書。說明書的內容以下:字體
藏寶樓共有N+1層,最上面一層是頂層,頂層有一個房間裏面藏着寶藏。除了頂層外,藏寶樓另有N層,每層M個房間,這M個房間圍成一圈並按逆時針方向依次編號爲0,…,M-1。其中一些房間有通往上一層的樓梯,每層樓的樓梯設計可能不一樣。每一個房間裏有一個指示牌,指示牌上有一個數字x,表示從這個房間開始按逆時針方向選擇第x個有樓梯的房間(假定該房間的編號爲k),從該房間上樓,上樓後到達上一層的k號房間。好比當前房間的指示牌上寫着2,則按逆時針方向開始嘗試,找到第2個有樓梯的房間,從該房間上樓。若是當前房間自己就有樓梯通向上層,該房間做爲第一個有樓梯的房間。spa
尋寶說明書的最後用紅色大號字體寫着:「尋寶須知:幫助你找到每層上樓房間的指示牌上的數字(即每層第一個進入的房間內指示牌上的數字)總和爲打開寶箱的密鑰」。設計
請幫助小明算出這個打開寶箱的密鑰。code
第一行2個整數N和M,之間用一個空格隔開。N表示除了頂層外藏寶樓共N層樓,M表示除頂層外每層樓有M個房間。blog
接下來N*M行,每行兩個整數,之間用一個空格隔開,每行描述一個房間內的狀況,其中第(i-1)*M+j行表示第i層j-1號房間的狀況(i=1,2,…, N;j=1,2,…,M)。第一個整數表示該房間是否有樓梯通往上一層(0表示沒有,1表示有),第二個整數表示指示牌上的數字。注意,從j號房間的樓梯爬到上一層到達的房間必定也是j號房間。ip
最後一行,一個整數,表示小明從藏寶樓底層的幾號房間進入開始尋寶(注:房間編號從0開始)。io
輸出只有一行,一個整數,表示打開寶箱的密鑰,這個數可能會很大,請輸出對20123取模的結果便可。class
2 3統計
1 2數據
0 3
1 4
0 1
1 5
1 2
1
5
【輸入輸出樣例說明】
第一層:
0號房間,有樓梯通往上層,指示牌上的數字是2;
1號房間,無樓梯通往上層,指示牌上的數字是3;
2號房間,有樓梯通往上層,指示牌上的數字是4;
第二層:
0號房間,無樓梯通往上層,指示牌上的數字是1;
1號房間,有樓梯通往上層,指示牌上的數字是5;
2號房間,有樓梯通往上層,指示牌上的數字是2;
小明首先進入第一層(底層)的1號房間,記下指示牌上的數字爲3,而後從這個房間開始,沿逆時針方向選擇第3個有樓梯的房間2號房間進入,上樓後到達第二層的2號房間,記下指示牌上的數字爲2,因爲當前房間自己有樓梯通向上層,該房間做爲第一個有樓梯的房間。所以,此時沿逆時針方向選擇第2個有樓梯的房間即爲1號房間,進入後上樓梯到達頂層。這時把上述記下的指示牌上的數字加起來,即3+2=5,因此打開寶箱的密鑰就是5。
【數據範圍】
對於50%數據,有0<N≤1000,0<x≤10000;
對於100%數據,有0<N≤10000,0<M≤100,0<x≤1,000,000。
題目分析
本題純粹模擬,基本沒有太多須要跳過的坑。能夠統計每一層樓裏面,有樓梯的房間數,避免在某一層樓繞不少圈。具體看下面的代碼註釋吧
1 #include <stdio.h> 2 struct room 3 { 4 int haveStairs;//描述房間是否有上樓的樓梯。0:沒有;1:有。 5 int x;//房間裏面指示牌上的數字。 6 }; 7 int N,M,Y;//Y表示第1層從Y號房間進入。 8 struct room a[10002][102]; 9 int count[100002]={0};//count[i]表示第i層有樓梯的房間數量 10 int ans=0; 11 int main() 12 { 13 int i,j,t,k; 14 15 scanf("%d%d",&N,&M); 16 for(i=0;i<N;i++) 17 { 18 for(j=0;j<M;j++) 19 { 20 scanf("%d%d",&a[i][j].haveStairs,&a[i][j].x); 21 count[i]+=a[i][j].haveStairs; 22 } 23 } 24 scanf("%d",&Y); 25 26 for(i=0;i<N;i++) 27 { 28 t=a[i][Y].x; 29 ans=(ans+t)%20123; 30 t=t%count[i]; 31 if(t==0) t=count[i]; 32 33 k=Y; 34 do 35 { 36 if(a[i][k].haveStairs==1) t--; 37 k++; 38 k=k%M; 39 }while(t); 40 k--; 41 if(k==-1) k=M-1; 42 Y=k; 43 } 44 printf("%d\n",ans); 45 return 0; 46 }