0
0

More than 1 year has passed since last update.

ABC219 C - Neo-lexicographic Ordering から学んだ

Last updated at Posted at 2021-09-18

abc219_1.png
abc219_2.png

踏む踏む。
S に含まれる英小文字を X の中から探し、
数字に置き換えてみた。だがしかし WA.

Neo-lexicographicOrdering_rv0.py
X = input()
N = int(input())

S =[]
dic = {}
for _ in range(N):#5*10**4
    s = input()
    y = ""
    for i in range(len(s)):#10
        y += str(X.index(s[i]))# index って 計算量は X 長に依存だなー 26
    dic[y] = s

#print(dic)
dic = sorted(dic.items(),key=lambda t:t[0])
#print(dic)

for a,b in dic:
    print(b)

数字を連結するのは良かったが、
例えば 1 , 2, 3 は 123 でよい。
しかし 1, 20 , 3 はどうなる?
1203 は正しく辞書順にできないのでは?

っというわけで、数字に置き換えるのではなく、
従来の abcdefghi... の順番に置き換えて考えたら通った。

Neo-lexicographicOrdering_rv1.py
Y = "abcdefghijklmnopqrstuvwxyz"
X = input()
N = int(input())

S =[]
dic = {}
for _ in range(N):#5*10**4
    s = input()
    y = ""
    for i in range(len(s)):#10
        for j in range(len(X)):#26
            if s[i] == X[j]:
                y += Y[j]
    dic[s] = y

#print(dic)
dic = sorted(dic.items(),key=lambda t:t[1])
#print(dic)

for a,b in dic:
    print(a)
#1774ms

計算量は余裕のはずだったが、実際はギリギリだった。
もうちょい考えてみるか。
index を使えば、もう少し簡略化できると思った。

abc219c.py
def solv():
    ref = "abcdefghijklmnopqrstuvwxyz"
    X = input()
    N = int(input())
    lis = []
    for _ in range(N):
        S = input()
        T = ""
        for i in range(len(S)):
            T += ref[X.index(S[i])]
        lis.append([S,T])
    lis = sorted(lis,key=lambda t:t[1])
    for a,b in lis:
        print(a)
solv()#232ms
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0