#45976: 怎樣都不會過


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

 

na:

您的答案為: ZORTBBMLNA

正確答案為: ZORTBBMLR

 

while True: try: n = input() if n == 'A': break a, b = input(), input() n = len(a) a = sum((ord(a[i]) - 65) * 26 ** (n_a - 1 - i) for i in range(n_a)) n = len(b) b = sum((ord(b[i]) - 65) * 26 ** (n_b - 1 - i) for i in range(n_b)) s = a + b r = "A" if s == 0 else "" while s > 0: r = chr(s % 26 + 65) + r s //= 26 print(r) except EOFError: break
#45977: Re: 怎樣都不會過


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

 

na:

您的答案為: ZORTBBMLNA

正確答案為: ZORTBBMLR

 

while True: try: n = input() if n == 'A': break a, b = input(), input() n = len(a) a = sum((ord(a[i]) - 65) * 26 ** (n_a - 1 - i) for i in range(n_a)) n = len(b) b = sum((ord(b[i]) - 65) * 26 ** (n_b - 1 - i) for i in range(n_b)) s = a + b r = "A" if s == 0 else "" while s > 0: r = chr(s % 26 + 65) + r s //= 26 print(r) except EOFError: break


傳錯了

while True:
    try:
        n = input()
        if n:
            a,b = input(),input()
        n = len(a)
        a = sum((ord(a[i])-65)*26**(n-i-1) for i in range(n))
        n = len(b)
        b = sum((ord(b[i])-65)*26**(n-i-1) for i in range(n))
        c = a+b
        r = []
        while c > 0:
            r.append(chr(c%26+65))
            c //= 26
        print("".join(r[::-1]))
    except EOFError:
        break
#45978: Re: 怎樣都不會過


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

題目有很多坑,輸入格式基本上是不符題目描述的,通過率低純粹是題目作者坑人,而不是題目真的很難

 

這題每行測資的最後面都有多餘的空白字元 \r

所以 a = sum((ord(a[i])-65)*26**(n-i-1) for i in range(n)) 這行在執行時,也會將 \r 視為字串的一部分

 

註: \r 的 ascii 編碼為 16

 

其他的...應該是測資有多餘空白行

還有沒有其他坑我就不確定了,因為我其實也不是很確定測資格式具體到底是怎樣,作者兩年沒上線了,所以這就只能是個謎

但可以確定的是,題目描述的測資格式,「G碼A和G碼B長度相等」這段話是可信的,其他都不值得信任。

 

#45979: Re: 怎樣都不會過


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

我 AC 的程式碼: gist

給你參考......也給以後想解這題的人參考

 

如果有其他人也想......挑戰這題,應該會有一點幫助

希望有生之年可以看到作者回來修正題目

 

#45980: Re: 怎樣都不會過


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

我 AC 的程式碼: gist

給你參考......也給以後想解這題的人參考

 

如果有其他人也想......挑戰這題,應該會有一點幫助

希望有生之年可以看到作者回來修正題目

 



以下是我嘗試過,確認測資格式不符合題目描述的部分:

  • 題目說每一行都是一個 G 碼,但實際上每行 G 碼後面都會有多餘空白字元 \r
  • 題目說每組測資有三行,第一行是 G 碼長度,但作者又自己坦承那個東西不值得信任,連作者自己都不知道那是什麼。
  • 題目說測資讀到代表"G 碼長度"的那一行的內容為"A"時,就結束程式,但作者又自己推翻,說要讀到 EOF,究竟哪個才是正確的呢?
  • 題目有多餘的空白行,什麼內容都沒有,就是純粹的空白,位置未知。
  • 題目格式是否真的是每組測資佔用三行?若為真,則 v3 那個版本不應該得到 80% 的分數,每組測資究竟占用幾行,坦白說我不知道。

 

#45985: Re: 怎樣都不會過


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

我 AC 的程式碼: gist

給你參考......也給以後想解這題的人參考

 

如果有其他人也想......挑戰這題,應該會有一點幫助

希望有生之年可以看到作者回來修正題目

 

while True:
    try:
        n = input().rstrip()
        if not n:
            continue
        a,b = input().rstrip(),input().rstrip()
    except EOFError:
        break
    n = len(a)
    a = sum((ord(a[i])-65)*26**(n-i-1) for i in range(n))
    b = sum((ord(b[i])-65)*26**(n-i-1) for i in range(n))
    c = a+b
    r = []
    if c == 0:
        r.append("A")
    while c > 0:
        r.append(chr(c%26+65))
        c //= 26
    print("".join(r[::-1]))

終於讀得進測資了,但會TLE(應該還是要用直式加法)

以下是我嘗試過,確認測資格式不符合題目描述的部分:

  • 題目說每一行都是一個 G 碼,但實際上每行 G 碼後面都會有多餘空白字元 \r
  • 題目說每組測資有三行,第一行是 G 碼長度,但作者又自己坦承那個東西不值得信任,連作者自己都不知道那是什麼。
  • 題目說測資讀到代表"G 碼長度"的那一行的內容為"A"時,就結束程式,但作者又自己推翻,說要讀到 EOF,究竟哪個才是正確的呢?
  • 題目有多餘的空白行,什麼內容都沒有,就是純粹的空白,位置未知。
  • 題目格式是否真的是每組測資佔用三行?若為真,則 v3 那個版本不應該得到 80% 的分數,每組測資究竟占用幾行,坦白說我不知道。

 



#45986: Re: 怎樣都不會過


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

TLE 我想應該是因為效率還有改進空間

開一個陣列紀錄 26 的指數的值,避免每次轉換都要重新計算 26 的 n 次方應該會有幫助

 

#45996: Re: 怎樣都不會過


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

TLE 我想應該是因為效率還有改進空間

開一個陣列紀錄 26 的指數的值,避免每次轉換都要重新計算 26 的 n 次方應該會有幫助

 


過了:

int_to_g = {i: chr(i + 65) for i in range(26)}
g_to_int = {chr(i + 65): i for i in range(26)}

while True:
    try:
        n = input().rstrip()
        if not n:
            continue
        a, b = input().rstrip(), input().rstrip()
    except EOFError:
        break

    n = len(a)
    powers = [26**i for i in reversed(range(n))]
    c = sum((g_to_int[a[i]] + g_to_int[b[i]]) * powers[i] for i in range(n))

    r = []
    if c == 0:
        r.append("A")
    while c > 0:
        r.append(int_to_g[c % 26])
        c //= 26
    print("".join(r[::-1]))