🐥

競技プログラミングの鉄則 アルゴリズムと思考力を高める77の技術をpythonで解いていく 第1章

2023/01/09に公開

書籍はこちら
https://www.amazon.co.jp/競技プログラミングの鉄則-アルゴリズム力と思考力を高める77の技術-Compass-Booksシリーズ-米田/dp/483997750X

問題集はこちら
https://atcoder.jp/contests/tessoku-book

競技プログラミングは久しぶりなので地道にチャレンジします〜。

A01 - The First Problem

n = int(input())
 
s = n * n
print(s)

A02 - The First Problem

n, m = map(int, input().split())
 
S = list(map(int, input().split()))
 
Q = 0
 
for i in range(n):
    if S[i] == m:
        print("Yes")
        Q += 1
        break
        
if Q != 1:
    print("No")

A03 - Two Cards

n, k = map(int, input().split())
 
p = list(map(int, input().split()))
q = list(map(int, input().split()))
 
papa = 0
for i in range(n):
    for g in range(n):
        if p[i] + q[g] == k:
            print("Yes")
            papa += 1
            break
    else: continue
    break
 
if papa != 1:
    print("No")

多重ループ構造を抜けるために
break -> else: continue を置く

A04 - Binary Representation 1

N = int(input())

list = []
for i in range(10):
    r = int((N/(2 ** i)) % 2) 
    list.append(r)

list.reverse() 
answer = "".join(map(str,list)) #joinを使うには配列の要素をstr型にする必要がある"
print(answer)

ちなみに10進法の数kを2進法に変換する方法(2進法でn桁)

list = []
for i in range(n)
    list.append((k/2 ** i) % 2) #一桁目から順々に格納する
list.reverse() #順番が逆になっているのでreverse()で逆向きにする

A05 - Three Cards

これはpypyじゃないと通らなかった

n, k = map(int, input().split())
count = 0
list = [] #リストはデバッグ用
for i in range(n):
    red = i + 1
    for g in range(n):
        blue = g + 1
        white = k - red - blue
        if white > 0 and n >= white:
            list.append([red,blue,white]) #リストはデバッグ用
            count += 1      
print(count)

B01 - A+B Problem

A, B = map(int, input().split())
print(A+B)

B02 - Divisor Check

A, B = map(int, input().split())
count = 0
for i in range(B-A+1):
    number = i + A #numberでA以上B以下の数を全て試行する
    if 100 % number == 0:
        count += 1
        break

if count > 0:
    print("Yes")
else: print ("No")

B03 - Supermarket 1

n = int(input())
A = list(map(int, input().split()))
count = 0
for i in range(n):
    for j in range(n):
        for k in range(n):
            if i == j or j == k or i == k:
                continue
            elif A[i] + A[j] + A[k] == 1000:
                count += 1
                break 
            
if count > 0:
    print("Yes")
else: print("No")

B04 - Binary Representation 2

n = int(input(),2)
print(n)

ちゃんとやるならこう

n = input()
str_n = list(n)
answer = 0
len = len(str_n)
for i in range(len):
    answer += (2 ** (len-i-1)) * int(str_n[i])

print(answer)

Discussion