BETA

今日の精進(20200104)

投稿日:2020-01-04
最終更新:2020-01-04

そろそろ研究もしなくてはならないのですくなめ。

Grid Repainting

difficulty灰色なので簡単かなと思ったが実装大変だった。多分もっと賢い実装ある…。

# coding: utf-8  
import numpy as np  
H, W = map(int, input().split())  
S = []  
cnt = 0  
for i in range(H):  
    s = input()  
    cnt += s.count("#")  
    S.append(s[:])  
t_cnt = 0  
T = [[False] * W] * H  
T = np.array(T)  
for i in range(H):  
    for j in range(W):  
        if S[i][j] == "#":  
            if 0 < i < H-1:  
                if 0 < j < W-1:  
                    T[i-1][j] = True  
                    T[i+1][j] = True  
                    T[i][j-1] = True  
                    T[i][j+1] = True  
                elif j == 0:  
                    T[i-1][j] = True  
                    T[i+1][j] = True  
                    T[i][j+1] = True  
                else:  
                    T[i-1][j] = True  
                    T[i+1][j] = True  
                    T[i][j-1] = True  
            elif i == 0:  
                if 0 < j < W-1:  
                    T[i][j-1] = True  
                    T[i][j+1] = True  
                    T[i+1][j] = True  
                elif j == 0:  
                    T[i][j+1] = True  
                    T[i+1][j] = True  
                else:  
                    T[i+1][j] = True  
                    T[i][j-1] = True  
            else:  
                if 0 < j < W-1:  
                    T[i][j-1] = True  
                    T[i][j+1] = True  
                    T[i-1][j] = True  
                elif j == 0:  
                    T[i][j+1] = True  
                    T[i-1][j] = True  
                else:  
                    T[i-1][j] = True  
                    T[i][j-1] = True  
for i in range(H):  
    for j in range(W):  
        if T[i][j] and S[i][j] == "#":  
            t_cnt += 1  
print("Yes" if cnt == t_cnt else "No")  

文字列の反転

言われたとおりにやるだけ。インデックスの操作に手間取ってしまった。

# coding: utf-8  
S = input()  
N = int(input())  
for i in range(N):  
    l, r = map(int, input().split())  
    l -= 1  
    r -= 1  
    S = S[:l] + S[l:r+1][::-1] + S[r+1:]  
print(S)  

価格の合計

bit演算子を使う。なぜこれがdifficulty茶なのか。解かれていないだけ???

# coding: utf-8  
N, X = map(int, input().split())  
A = list(map(int, input().split()))  
ans = 0  
for i in range(N):  
    if X >> i & 1:  
        ans += A[i]  
print(ans)  

□□□□□

正方形に並べた場合の値をp1、N-p1から1ずつ増やして行った場合の約数の差とNとの差の和をp2として、p1とp2の小さい方を出力する。

# coding: utf-8  
N = int(input())  
p1 = N - int(N**0.5) ** 2  
p2 = float("inf")  
t = N  
def yakusu(N):  
    L = []  
    for i in range(1, int(N**0.5)+1):  
        if N % i == 0:  
            L.append(i)  
            L.append(N//i)  
    r = float("inf")  
    for i in range(0, len(L), 2):  
        r = min(r, abs(L[i] - L[i+1]))  
    return r  
t = N - p1  
while t <= N:  
    p2 = min(p2, yakusu(t) + N - t)  
    t += 1  
print(min(p1, p2))  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

yosakaの技術ブログ。勉強したこととかを書きます。最近は精進の記録が多め。Pythonしか書けない雑魚

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう