ぶっちゃけ文章をよんで全然意味がわからなかったです。
とりあえず入力例を見てみます
4 4 1
p 2 4
a 3 1
i 4 2
z 1 2
1
1
1
2
・最初の行は地点の数 N と、移動の回数 K , 移動を開始する地点の番号 S
・脱出するには、迷路の地点を与えられた指示通りに移動し、移動で訪れた(移動の開始・終了地点を含む)地点に置かれたアルファベットをつなげた文字列を呪文として唱える必要があります。
・各頂点からは、他の頂点に向かって一方通行の 2 つの道が伸びています。
・続く N 行のうち i 行目(1 ≦ i ≦ N)では、番号 i 地点に置いてあるアルファベット a_i と
1 つめの道のつながっている地点の番号 r1_i , 2 つめの道のつながっている地点の番号 r2_i が与えられます。
・続く K 行のうち i 行目(1 ≦ i ≦ K)では、
i 回目の移動で選んだ道の番号 M_i が与えられます。
ということなので、
要するに、地点というのがそれぞれの地点になっていて、最初の例だと
ポイントの数が4個。移動できる回数も4個。で、ポイントの中で最初のスタート地点が1だと。
おそらく、ポイントには名前がついていて、1,2,3,4となってると思う。
で、それぞれ、P,A,I,Zがあるわけ。
次に、地点1から2つ道が伸びていて、それはどこかというと、地点2と地点4ってことか。
でそれを地点4まで情報が与えられてるわけね。
次に、スタート地点から選んだ道が1番目か2番目かってことだけど、地点2が1番目の道で、地点4が2番目の道ってことか。だから、選んだのは1なので、地点2を選んだことになる。
次も1番目で地点3、次も1番目で地点4,次も1番目で地点1。
でこれらをつなぐと、P,A,I,Z,Aとなる。これが答えか。
入力例2も確かめてみて、ロジックは間違いない。
なるほどわかったややこしい。
うーん。まあ、構造体データにすればいけそう。
最初から考えるの難しそうだけど。
まあ、ポイントの情報を入れるってことになりそうだな。
ポイントのクラスってことで、character(落ちてる文字)、route1(道がどこに通じてるか)、route2(道がどこに通じてるか)をクラスに登録して、
到着した時点に落ちてる文字を返して、
次に行動のときの選択で1番目だったらroute1、2番目だったらroute2を返す
ということにして
落ちてる文字を格納する変数を作っておいて
それを出力すれば良さそう。
ということで下でOKでした。
class Point():
def __init__(self,letter,route1,route2):
self.letter = letter
self.route1 = int(route1)
self.route2 = int(route2)
def getletter(self):
return self.letter
def getroute1(self):
return self.route1
def getroute2(self):
return self.route2
N,K,S = map(int,input().split())
#route情報取得
points =[Point(*input().split()) for _ in range(N)]
#行動情報から集めた文字を収集
#最初の地点がわかっているのでその地点の文字を取得して格納
#同様に地点も最初の地点がわかっているのでそれを格納
spell = points[S-1].getletter()
point = S
for _ in range(K):
if int(input()) == 1:
S = points[S-1].getroute1()
else:
S = points[S-1].getroute2()
spell = spell + points[S-1].getletter()
print(spell)