0
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.

M-SOLUTIONS プロコンオープン 2020

Last updated at Posted at 2020-07-29

M-SOLUTIONS プロコンオープン 2020にバーチャル参加しました。
ABCDの4問ACでした。
Python3を使用しています。

A問題

ifで条件分岐させます。

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


def main():
    X = int(input())
    if X >= 1800:
        print(1)
    elif X >= 1600:
        print(2)
    elif X >= 1400:
        print(3)
    elif X >= 1200:
        print(4)
    elif X >= 1000:
        print(5)
    elif X >= 800:
        print(6)
    elif X >= 600:
        print(7)
    else:
        print(8)           
    
if __name__ == "__main__":
    main()

B問題

条件を満たすまで操作を行い、操作回数がK以下であれば魔術を成功させられたと考えます。
これは入力されるA、B、C、Kが小さいために可能です。


M君は数字を2倍にする操作を行うため、最も小さい数となるべきAに操作を行わないことが分かります。
つまり、Aの値が固定された状態で考えます。
while文で、BがAより大きくなるように操作を行います。
これにより、Bの値が固定されます。
同様にwhile文でBより大きいCを求めることができます。

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


def main():
    A, B, C = map(int,input().split())
    K = int(input())
    count = 0
    while A >= B:
        B = B * 2
        count += 1
    while B >= C:
        C = C * 2
        count += 1
    if count <= K:
        print("Yes")
    else:
        print("No")
    
if __name__ == "__main__":
    main()

C問題

この問題は、前学期より評点が高いが低いか判定する必要があるだけで、実際の評点を求める必要はありません。


N学期の評点はA[0]*A[1] ~ *A[N-1]で求められます。
N+1学期の評点はA[1] ~ *A[N-1]*A[N]で求められます。
評点の高低を比較するだけなので、A[0]とA[N]を比較するだけで十分です。
これをfor文で繰り返し、N-K個の結果を表示します。

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


def main():
    N, K = map(int,input().split())
    A = list(map(int,input().split()))
    for i in range(N - K):
        if A[i] < A[i + K]:
            print("Yes")
        else:
            print("No")  
    
if __name__ == "__main__":
    main()

D問題

株価が低いときに買って、株価が高いときに売りたいというのが基本的な目標です。


まずi番目とi+1番目を比較し、大きくなっていれば1、小さくなっていれば-1というリストを作ります。 (リスト内包表記の利用)
1のときは買えるだけ買います。
1が続くということは株価が上がっていくということなので、一番初めに1になった地点で買えばOKです。
同様に-1になったときは全ての株を売ります。
-1が続くということは株価が下がっていくということなので、一番初めに-1になった地点で売ればOKです。

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


def main():
    N = int(input())
    A = list(map(int,input().split()))
    zougen = [-1 if A[i] > A[i + 1] else 1 for i in range(N - 1)]
    money = 1000
    kabu = 0
    for i in range(N-1):
        if zougen[i] == 1:
            kabu += money // A[i]
            money = money % A[i]
        else:
            money += kabu * A[i]
            kabu = 0
    print(A[-1] * kabu + money)



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

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
0
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?