SOMPO HD プログラミングコンテスト2021
結果
下がんなかったから良かったけど、
2問目と3問目はもうちょっと早く解けたなぁ。
そして4問目は無念。
問題と解答と勉強
提出したコード
print(100 - int(input())%100)
提出したコード
S = list(input()) if ''.join(S[::2]).islower(): if ''.join(S[1::2]) == "" or ''.join(S[1::2]).isupper(): print("Yes") else: print("No") else: print("No")
提出したコード
N, K = input().split() for _ in range(int(K)): a = sorted(list(N), reverse=True) b = sorted(list(N)) N = str(int("".join(a)) - int("".join(b))) print(int(N))
何が違うかわからんやつ
def Base_n_to_10(X,n): out = 0 for i in range(1,len(str(X))+1): out += int(X[-i])*(n**(i-1)) return out X = int(input()) x = list(str(X)) M = int(input()) if len(x) == 1: if X <= M: print(1) exit() else: print(0) exit() a = int((M // int(x[0]))**(1/(len(x)-1))) b = int(max(x)) + 1 for i in reversed(range(a+1)): if Base_n_to_10(str(X),i) <= M: print(i - b + 1) break
いやぁ、合ってると思ったんだけどねぇ。
9個も違うってことは何か特定の入力で間違えるっぽいけど。
それが何なのかわからーーーん。
解答
def base(n): s = 0 for i in X: s = s*n + i return s X = [*map(int,input())] M = int(input()) d = max(X) if len(X) < 2: print(int(d<=M)) exit() l, r = 0, 10**20 while r-l > 1: mid = l + r >> 1 if base(m) <= M: l = m else: r = m print(max(l-d, 0))
考え方が違うから自分のが何処で違ってるかは不明。
二分探索?を使うのか。なるほ。
まあそれは言われちゃえば、へぇ、って感じなので良いとして。
print(int(d<=M)) exit()
これさ、何言ってんの?
と思ったんだけど。
print(d<=M)
ってするとさ、
d<=M
なら True
、違えば False
ってなるから。
んで True
= 1
で False
= 0
だから、
print(int(d<=M))
にすると、
d<=M
なら 1
、違えば 0
ってなるのね。
だから、
if d <= M: print(1) else: print(0) exit()
これと同じってことなんよね。
え?常識?
なるほど!って思ったんだけど。
いや最初ね、exit(print(int(d<=m)))
って書いてあって。
え?何言ってんのこれ?って思ったんよね。
どうやってこの問題読んでこう書こうって浮かぶかねぇ。
4問目よりは簡単だったらしいね、わからんけど。
知らん!!