1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ABC174

Last updated at Posted at 2020-08-03

AtCorder Beginner Contest 174 に参加しました。
ABDの3問ACでした。
Python3を使用しています。

A問題

ifで条件分岐させます。

import sys
def input():
    return sys.stdin.readline()[:-1]


def main():
    s=int(input())
    if s >= 30:
        print("Yes")
    else:
        print("No") 

    
if __name__ == "__main__":
    main()

B問題

i番目の点と中心からの距離の2乗の値を、リストL[i]に入れます。
これがDの2乗より大きいかifで判定します。

import sys
def input():
    return sys.stdin.readline()[:-1]


def main():
    N, D = map(int,input().split())
    X = [0] * N
    Y = [0] * N
    L = [0] * N
    ans = 0
    for i in range(N):
        X[i], Y[i] = map(int, input().split())
        L[i] = X[i] ** 2 + Y[i] ** 2
        if L[i] <= D ** 2:
            ans += 1
    print(ans)


    
if __name__ == "__main__":
    main()

C問題

$7、77、777、…$となる数列に$K$で割った余りが$0$となる数を求めます。
数列は$70、700、7000…$と増えるため、$K$と$10$が互いに素である場合のみしか成り立たない。
(この数列が$7$の倍数のため、$70$でなく$10$としている)


まずKが$2$の倍数または$5$の倍数のとき、数列にKの倍数は現れないので場合分けをします。
次に$7、77、777、…$となる数列を作り、それがKで割った余りが$0$となるまでwhile文で繰り返します。
$ x = (x * 10 + 7) % K $ではなく$ x = (x + 7 * 10 ** i) % K $
とすると$ 7 $ * $ 10 $ ** $ i $を計算するのに時間がかかるため、TLEとなりました。(2020/08/04編集しました)
下記は時間が終わってからACになった回答です。

import sys
def input():
    return sys.stdin.readline()[:-1]


def main():
    K = int(input())
    x = 0
    i = 0
    if K % 2 == 0 or K % 5 ==  0:
        print(-1)
        exit()
    
    while True:
        x = (x * 10 + 7) % K
        i += 1
        if x == 0:
            print(i)
            break


if __name__ == "__main__":
    main()

D問題

左から右に並べられたN個の石を、左側にR右側にWとなるように並べます。
問題文を読むと、2つの石を入れ替える操作と1つの石の色を変える操作があります。
しかし、最小回数の操作で並べることを考えると、2つの石を入れ替える操作のみ行えば良いことが分かります。


まず石の並び順を文字列として読み込み、白い石の数wを求めます。
左から0~w番目は白い石であるべきなので、この範囲にある赤い石の数を求めます。
これが操作を行うべき数となり、答えです。

import sys
def input():
    return sys.stdin.readline()[:-1]


def main():
    N = int(input())
    c = list(input())
    w = c.count("R")
    hidari = c[:w]
    ans = 0
    for i in hidari:
        if i == "W":
            ans += 1
    print(ans)

    
if __name__ == "__main__":
    main()
1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?