このディレクトリの索引

#  

Best Cow Line(POJ3617)

# # N文字の文字列Sが与えられ、N文字の文字列Tを作ります。 # はじめはTは長さ0の文字列で、次のいずれかの操作が行えます。 # ・Sの先頭を一文字削除し、Tの末尾に追加する # ・Sの末尾を一文字削除し、Tの末尾に追加する # 辞書順比較でできるだけ小さくなるようにTを作ってください。 # # 制約 # ・1 =< N =< 2000 # ・文字列Sに含まれるのはローマ字の大文字のみ # poj3617(S,T) :- 'リストの比較がし易いように反転リストS2を作る'(S,S2), 'S,S2からTを生成'(S,S2,T). 'リストの比較がし易いように反転リストS2を作る'(S,S2) :- reverse(S,S2). 'S,S2からTを生成'([],[],[]). 'S,S2からTを生成'([A|R1],[B|R2],[A|R3]) :- [A|R1] @=< [B|R2], 先頭要素を採用されなかったリストは末尾要素を削除する([B|R2],R22), 'S,S2からTを生成'(R1,R22,R3). 'S,S2からTを生成'([A|R1],[B|R2],[B|R3]) :- [A|R1] @> [B|R2], 先頭要素を採用されなかったリストは末尾要素を削除する([A|R1],R11), 'S,S2からTを生成'(R11,R2,R3). 先頭要素を採用されなかったリストは末尾要素を削除する(A,B) :- append(B,[_],A).