SOMPO HD プログラミングコンテスト2021


f:id:penyooo:20200112235130p:plain


  • 独学者です。( 2019 / 9 ~ )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。





結果



f:id:penyooo:20210220231308p:plain

下がんなかったから良かったけど、

2問目と3問目はもうちょっと早く解けたなぁ。

そして4問目は無念。





問題と解答と勉強


atcoder.jp



提出したコード
print(100 - int(input())%100)









atcoder.jp



提出したコード
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")









atcoder.jp



提出したコード
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))









atcoder.jp



何が違うかわからんやつ
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



いやぁ、合ってると思ったんだけどねぇ。

f:id:penyooo:20210220225946p:plain

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 ってなるから。

んで True1False0 だから、

print(int(d<=M)) にすると、
d<=M なら 1 、違えば 0 ってなるのね。

だから、

if d <= M:
    print(1)
else:
    print(0)
exit()


これと同じってことなんよね。

え?常識?

なるほど!って思ったんだけど。

いや最初ね、exit(print(int(d<=m))) って書いてあって。

え?何言ってんのこれ?って思ったんよね。

どうやってこの問題読んでこう書こうって浮かぶかねぇ。



atcoder.jp



4問目よりは簡単だったらしいね、わからんけど。

atcoder.jp



知らん!!