AtCoder Beginner Contest 170 / Python


f:id:penyooo:20200112235130p:plain


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

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

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



今回は全体的に酷かった。何でだろう。

f:id:penyooo:20200614224115p:plain

B問題からミス連発。

いままで一番ミスが多かった。

そしてD問題は正解できず。こりゃダメだ。

結果


f:id:penyooo:20200614233700p:plain

ですよね、知ってた。

まぁ、そうだよねぇ、レートもテンションも下がるわぁ。





問題と解答と勉強


atcoder.jp



提出したコード
x = list(map(int, input().split()))
 
print(x.index(0) + 1)









atcoder.jp



開き直って今回は間違い探し企画だ!

皆さんわかるかな??

間違ってるやつ
X, Y = map(int, input().split())
 
n = (X*4 - Y) / 2
 
if n >=0 and n <= Y and n.is_integer():
    print("Yes")
else:
    print("No")



これを自信満々で提出したのだが、間違っている。

はい、どこが間違っているでしょう。

僕は何故か見つけられませんでした。


わかったかな。

答えを言うよ。

3行目の n <= Yn <= X

何でわからんかったのかなぁ、謎。



結局提出したコード
X, Y = map(int, input().split())
Flag = False
 
for i in range(X+1):
    if i * 4 + (X - i)*2 == Y:
        Flag  = True
 
if Flag:
    print("Yes")
else:
    print("No")



仕方がないので for 回して計算するので書き直した。

なんてこった。







atcoder.jp



間違ってるやつ
import sys
 
X, N = map(int, input().split())
 
if N == 0:
    print(X)
    sys.exit()
    
p = list(map(int, input().split()))
 
for i in range(10):
    m = X - ((i//2 +1) * (-1)**i)
    if m not in p:
        print(m)
        break



これは何かもうどうしようもない。

for のところ、試しに回してた range(10) のまま提出している。

ガッカリだよ!

さらに間違ってるやつ
import sys
 
X, N = map(int, input().split())
 
if N == 0:
    print(X)
    sys.exit()
    
p = list(map(int, input().split()))
 
for i in range(1000):
    m = X - ((i//2 +1) * (-1)**i)
    if m not in p:
        print(m)
        break



range は適当に 1000 に増やしたが、結局間違っている。

はい、何が違うでしょう。

ヒント、range は関係ない。もっと根本的な間違い。

わかったかな??


答えを出すよ。

提出したコード
import sys
 
X, N = map(int, input().split())
 
if N == 0:
    print(X)
    sys.exit()
    
p = list(map(int, input().split()))
 
if X not in p:
    print(X)
    sys.exit()
 
for i in range(1000):
    m = X - ((i//2 +1) * (-1)**i)
    if m not in p:
        print(m)
        break



真ん中んところね、X が答えになるパターンが抜けていた。

何で気が付かないかねぇ。

相当に時間を無駄にした後にやっと気が付けた。







atcoder.jp



間違ってるやつ
import sys
import numpy as np
 
N = int(input())
 
if N == 1:
    print(int(input()))
    sys.exit()
 
A = set(map(int, input().split()))
 
if len(A) == 1:
    print(0)
    sys.exit()
 
A = np.array(sorted(A))
B = np.array([A[0]])
 
for i in range(len(A)-1):
    if np.all(A[i+1] % B != 0):
        B = np.append(B, A[i+1])
print(len(B))



わかったかな??

わかったら教えてください。

僕はわかっていません。

例題は全部通るんだけどねぇ、何が違うんだろう。


まあ TLE も出てるから間違いが直っても通らないんだけどね!

もうグダグダ!今回グダグダ!もうイヤ!知らない!



こういう考え方らしいよ
n = int(input())
a = sorted(list(map(int, input().split())))
max = a[-1]
memo = ['Yes'] * (10**6+1)
ans = 0
 
for i, a_i in enumerate(a):
    if memo[a_i] == 'No':
        continue
    for j in range(a_i, max+1, a_i):
        memo[j] = 'No'
    if i != n-1 and a_i == a[i+1]:
        continue
    ans += 1



なるほどなぁ。

ちゃんと勉強して自分流に書いた。
N = int(input())
A = sorted(list(map(int, input().split()))) + [0]
 
memo = ['Y'] * (10**6+1)
mx = max(A)+1
count = 0
 
for i in range(N):
    a = A[i]
    if memo[a] == 'N':
        continue
    for j in range(a, mx, a):
        memo[j] = 'N'
    if a == A[i+1]:
        continue
    
    count += 1
 
print(count)









atcoder.jp

atcoder.jp



もう今日は気悪いから E と F なんか見もしないからな!

もうイヤ!なんなん!キライ!