EOJ 3 玩具謎題

2022-09-04 05:33:09 字數 1432 閱讀 4825

小南有一套可愛的玩具小人,它們各有不同的職業。

有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了乙個圈,它們有的面朝圈內,有的面朝圈外。如下圖:

這時 singer 告訴小南乙個謎題:「眼鏡藏在我左數第 3 個玩具小人的右數第 1 個玩具小人的左數第 2 個玩具小人那裡。」

小南發現,這個謎題中玩具小人的朝向非常關鍵,因為朝內和朝外的玩具小人的左右方向是相反的:面朝圈內的玩具小人,它的左邊是順時針方向,右邊是逆時針方向;而面向圈外的玩具小人,它的左邊是逆時針方向,右邊是順時針方向。

小南一邊艱難地辨認著玩具小人,一邊數著:

「singer 朝內,左數第 3 個是 archer。

「archer 朝外,右數第 1 個是 thinker。

「thinker 朝外,左數第 2 個是 writer。

「所以眼鏡藏在 writer 這裡!」

有 n 個玩具小人圍成一圈,已知它們的職業和朝向。現在第 1 個玩具小人告訴小南乙個包含 m 條指令的謎題,其中第 i 條指令形如「左數/右數第 si 個玩具小人」。你需要輸出依次數完這些指令後,到達的玩具小人的職業。

input

輸入的第一行包含兩個正整數 n (n≤105), m (m≤105),表示玩具小人的個數和指令的條數。

接下來 n 行,每行包含乙個整數和乙個字串,以逆時針為順序給出每個玩具小人的朝向和職業。其中 0 表示朝向圈內,1 表示朝向圈外。保證不會出現其他的數。字串長度不超過 10 且僅由小寫字母構成,字串不為空,並且字串兩兩不同。整數和字串之間用乙個空格隔開。

接下來 m 行,其中第 i 行包含兩個整數 ai, si,表示第 i 條指令。若 ai=0,表示向左數 si 個人;若 ai=1,表示向右數 si 個人。保證 ai 不會出現其他的數,1≤si輸出乙個字串,表示從第乙個讀入的小人開始,依次數完 m 條指令後到達的小人的職業。

1 #include 2 #include 3

using

namespace

std;

4struct guy;

5int

main()

618 cout << v[p].name <19return0;

20 }

16行,關鍵就是把陣列看成乙個圓圈(尾和頭相連),如何實現從尾繞到頭或從頭跨到尾的。

1

if((!v[p].dir&&!direct)||(v[p].dir&&direct))

2while(go--)

3 p==0?p=n-1:p--;

4else

5while(go--)

6 p==n-1?p=0:p++;

一開始是這麼寫的,不出所料地超時了。

另外使用cin讀取比scanf慢了一倍。

模擬 玩具謎題

洛谷p1563玩具謎題 結構體存小人資訊 名字toy i na 方向toy i dir 朝圈外1 朝圈內 1 pos表示當前位置 輸入步驟 方向d 向左 1 向右1 步數s 則pos pos d toy pos dir s 向左 朝外 向右 朝內 逆時針 pos pos s mod n pos 0 ...

洛谷 玩具謎題

小南有一套可愛的玩具小人,它們各有不同的職業。有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了乙個圈,它們有的面朝圈內,有的面朝圈外。如下圖 這時singersingersinger告訴小南乙個謎題 眼鏡藏在我左數第3個玩具小人的右數第111個玩具小人的左數第222個玩具小人那裡。...

codevs 6280 玩具謎題

題目描述 description 小南有一套可愛的玩具小人,它們各有不同的職業。有一天,這些玩具小人把小南的眼鏡藏了起來。小南發現玩具小人們圍成了乙個圈,它們有的面朝圈內,有的面朝圈外。如下圖 這時singer 告訴小南乙個謎題 眼鏡藏在我左數第 3 個玩具小人的右數第 1 個玩 具小人的左數第 2...