パ研合宿2020 第1日「SpeedRun」に参加してみた

はじめに

この前、AtCoderで開催された パ研合宿2020 第1日「SpeedRun」 に参加しました。1時間ちょっとで私用で離脱し、結果は7完1700点でした。 f:id:tnodino:20210108034719p:plain

A パ研合宿2020

2021を出力するだけです。

print(2021)

B パ研合宿2403

最初は文字列のリストとして受け取り、それを数値に変換して最大値を得ました。

x = list(input())
x = list(map(int,x))
print(max(x))

C 皆勤賞

連想配列で毎日参加した人数を数えました。

n = int(input())
dic = {}
for i in range(n):
    k = int(input())
    s = list(input().split())
    for j in range(k):
        try:
            dic[s[j]] += 1
        except:
            dic[s[j]] = 1
ans = 0
for i in dic.values():
    if i == n:
        ans += 1
print(ans)

E Amary

解説を見るともっと簡略化できたようです。
両方同じ値だと実現不可能。あとは細かく分岐してごり押ししました。

x,y = map(int,input().split())
if x == 0 and y == 0:
    print(1,1)
    exit(0)
if x == 0:
    print(y*2,y)
    exit(0)
if y == 0:
    print(x,x*2)
    exit(0)
if x == y:
    print(-1)
    exit(0)
if x > y:
    print(x,x+y)
else:
    print(x+y,y)

F Fibonaccyan

与えられる値が 3000 までなので、フィボナッチ数を 3000 まで求めたらいいのかなと思いました。嘘解法な気がします。

p = int(input())
f = [0] * 3000
f[1],f[2] = 1,1
for i in range(3,3000):
    f[i] = f[i-2] + f[i-1]
for i in range(1,3000):
    if f[i] % p == 0:
        print(i)
        break

G 同意書

各メンバーが同意書を出した、出していないで全探索しました。

n,m = map(int,input().split())
l = []
r = []
s = []
for i in range(m):
    x,y,z = map(int,input().split())
    l.append(x)
    r.append(y)
    s.append(z)
ans = -1
for p in range(2**n):
    x = p
    f = [0] * (n+1)
    i = 1
    while x > 0:
        if x & 1:
            f[i] = 1
        x >>= 1
        i += 1
    flg = True
    for i in range(m):
        x = 0
        for j in range(l[i],r[i]+1):
            x += f[j]
        if x != s[i]:
            flg = False
            break
    if flg:
        ans = max(ans,sum(f))
print(ans)

J Output-only

ピタゴラス数になるような数は何?で検索すると解説にもある公式が出てきました。その公式を使って、条件を満たしていたら出力し、10万回出力したら終了させました。

from math import gcd
x = 0
for m in range(1,1000):
    for n in range(1,m):
        a = m**2-n**2
        b = 2*m*n
        c = m**2+n**2
        if a < b < c:
            if gcd(gcd(a,b),c) == 1:
                print(a,b,c)
                x += 1
                if x == 10**5:
                    exit(0)

感想

ABC級の問題が15問、制限時間が2時間と、とても大変でした。
500点、600点問題が全く解けていないので、この点数帯が解けるよう精進していきたいです。