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
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
題目有很多坑,輸入格式基本上是不符題目描述的,通過率低純粹是題目作者坑人,而不是題目真的很難
這題每行測資的最後面都有多餘的空白字元 \r
所以 a = sum((ord(a[i])-65)*26**(n-i-1) for i in range(n))
這行在執行時,也會將 \r
視為字串的一部分
註: \r
的 ascii 編碼為 16
其他的...應該是測資有多餘空白行
還有沒有其他坑我就不確定了,因為我其實也不是很確定測資格式具體到底是怎樣,作者兩年沒上線了,所以這就只能是個謎
但可以確定的是,題目描述的測資格式,「G碼A和G碼B長度相等」這段話是可信的,其他都不值得信任。
我 AC 的程式碼: gist
給你參考......也給以後想解這題的人參考
如果有其他人也想
猜......挑戰這題,應該會有一點幫助希望有生之年可以看到作者回來修正題目
以下是我嘗試過,確認測資格式不符合題目描述的部分:
\r
我 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% 的分數,每組測資究竟占用幾行,坦白說我不知道。
TLE 我想應該是因為效率還有改進空間
開一個陣列紀錄 26 的指數的值,避免每次轉換都要重新計算 26 的 n 次方應該會有幫助
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]))