atcoder ABC310 C - Reversibleの解答
・考え方:二分探索で解ける。まず、setにして重複を消す。次に反転文字列が文字列全体にないか、二分探索してあったら答えを-1する。
import bisect n=int(input()) s=[] for _ in range(n): s.append(input()) s=list(set(s)) #setで重複を消す ns=len(s) s.sort() for i in range(len(s)): #先頭を消す。自分自身を参照しないため。 p=s.pop(0) #p[::-1]でpの反転文字 l=bisect.bisect_left(s,p[::-1]) r=bisect.bisect_right(s,p[::-1]) #p[::-1]がsの中にあったら、答えを-1。なかったら、pをもとに戻す。 if l!=r: ns-=1 else: s.append(p) print(ns)