AtCoder Beginner Contest 162 / Python


f:id:penyooo:20200112235130p:plain


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

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

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





結果


f:id:penyooo:20200412232504p:plain

何か全く出来なかった。

でも一つ文句言って良い?ジャッジのサーバー重くなるのマジでやめて。

2問目がジャッジされるのに30分掛かってるからね。

そんなんされたら無理だわ。完全にペース崩して3問目解けないわ。
あーーもうね、それはそうなんですよ、仕方がないんですよ。
しかも何か普通にジャッジされてるんだね、大体の人は、何なんそれ。

ということで、2問目解くのクソ遅いし3問目が解けないという最低の結果に。
一番最初に参加したときよりもヒドイ。過去最低だ。引退を考えるレベル。





問題と解答と勉強


atcoder.jp

提出したコード
N = [i for i in input()]
 
if "7" in N:
    print("Yes")
else:
    print("No")









atcoder.jp



提出したコード
N = int(input())
count = 0
 
for i in range(N+1):
    if i % 3 != 0 and i % 5 != 0:
        count += i
print(count)



正直に言おう、range(N+1)range(N) で提出した。

今さらその間違いは無いわ。というのは置いといたとしてだ。

このジャッジに30分以上かかって、イライラした上に不正解が出て。

完全にペースが狂った。

あーーーーーもう!!!!これ書きながらまたイライラしてきた!!!

うがーーーーーーーーーーーーーーーーーーーーーー!!!







atcoder.jp

後で出したやつ
import itertools
import math
 
K = int(input())
l = range(1, K+1)
ans = sum(l)
 
for a, b in itertools.combinations(l, 2):
    ans += math.gcd(a, b) * 6
 
for a, b, c in itertools.combinations(l, 3):
    ans += math.gcd(math.gcd(a,b), c) * 6
    
print(ans)



あのね、これ通るんです、普通に。

でもね、

math.gcd じゃなくて fractions.gcd を使ってるとタイムアウトするんです。



L 知ってるか、math の gcd と fractions の gcd は 計算速度が全然違う


知るか!!!!!!!!!

知らねーーーーーーーーよ!!!!!!!!バーカバーーーーーーカ!!!!

fractions のカーちゃんデーベーソーーーーーーー!!!!!!



これがどうやったら高速化できるのかを考えるのに全ての時間を無駄に費やした・・・



ちなみに普通にforで回せば良いだけだったみたい。

from math import gcd

n = int(input())
sum = 0
for i in range(1, n+1):
    for j in range(1, n+1):
        for k in range(1, n+1):
            sum += gcd(gcd(i, j), k)
print(sum)



あ、でもこれもfractionsのクソ馬鹿野郎のgcdだとタイムアウトするから!!

そこんとこ夜・露・死・苦!







atcoder.jp



後で考えたやつ
N = int(input())
S = [i for i in input()]

r = 0
g = 0
b = 0
no = 0

for i in S:
    if i == "R":
        r += 1
    elif i == "G":
        g += 1
    else:
        b += 1

for i in range(N):
    for j in range(i+1, N):
        k = j*2 - i
        if k >= N:
            break
        elif S[i] != S[j] and S[j] != S[k] and S[k] != S[i]:
            no += 1
 
print(r*g*b - no)



4問目簡単じゃねーーかーーーーーよーーーーーーー。

全通りから要らないの引けば良いだけだ。

全通りの求め方も要らないやつの求め方も難しいことは無い。




RGBの数を数えるのこういう書き方もあるみたい。

r = len([i for i, x in enumerate(s) if x=='R'])
g = len([i for i, x in enumerate(s) if x=='G'])
b = len([i for i, x in enumerate(s) if x=='B'])


どっちでも良いような気もするけど見た目キレイ。








atcoder.jp



ぱっと見、出来そうかな、と思ったけどわからんかった。

疲れたからもう良いや。








atcoder.jp



知らん!!






振り返ると何でこんな出来になったのかさっぱりだ。

どちらかと言えば簡単な回だった気さえする。

競技プログラミングはスポーツなんだなぁ・・・
競技の進行やなんか自分と関係ないところで不具合があっても、
それで精神を乱してしまったら負けなのだ。

ということで、直近5、6回分のレートを棒に振ってしまったので、
次回からまたコツコツやっていきたいと思わなくもない、けど、

なんかちょっと気力が萎えたなぁぁぁ。という感じである。