본문으로 바로가기

C148:戦闘シミュレーション

category TIL/Algorithm 2024. 4. 20. 21:15

あなたは異世界に転生した勇者です。この世界にはレベルという概念があり、戦闘を起こした際、レベルが高い方が勝利となります。勝利した側は相手のレベルの半分 (小数点以下切り捨て) だけレベルが上昇し、敗北した側はレベルが半分 (小数点以下切り捨て) になります。またレベルが同じ場合戦闘は引き分けとなり、レベルの変動は起きません。

例えばあなたのレベルが 20 で、戦闘相手のレベルが 11 のとき、あなたの勝利となります。戦闘後、あなたのレベルは 5 上昇し 25 に、相手のレベルは 5 になります。

あなたはこの世界でのレベルの変化をシミュレーションしようと考えています。
戦闘を始める前のあなたのレベルと、N 回の戦闘で戦う相手のレベルが順に与えられるので、N 回の戦闘後にあなたのレベルがいくつになったかを出力してください。

入力例 1 では以下の表のようにレベルが遷移します。

初めのあなたのレベルは 10 で、5 人と戦闘します。
1 人目と 2 人目、それぞれとの戦闘はあなたの勝利で、それぞれの戦闘でレベルが 2, 5 上昇します。
3 人目との戦闘時点でのあなたのレベルは 17 なので、レベル が 20 である相手に敗北してレベルが 8 に変化します。
4 人目との戦闘は引き分けでレベルの変化は生じません。
最後に 5 人目との戦闘に勝利し、レベルが 3 上昇してレベル 11 となります。

評価ポイント10回のテストケースで、正答率、実行速度、メモリ消費量をはかり得点が決まります。
より早い解答時間で提出したほうが得点が高くなります。
  1. 複数のテストケースで正しい出力がされるか評価(+50点)
  2. 解答までの速さ評価(+50点)
入力される値

入力は以下のフォーマットで与えられます。

N L
x_1
x_2
...
x_N
  • ・1 行目に戦闘回数の N と、最初のあなたのレベル L が与えられます。
  • ・続く N 行の各行には i 番目 (1 ≦ i ≦ N) の戦闘相手のレベルが x_i であるという情報が与えられます。
  • ・入力は合計で N+1 行からなり、入力値最終行の末尾に改行が 1 つ入ります。

それぞれの値は文字列で標準入力から渡されます。標準入力からの値取得方法はこちらをご確認ください
期待する出力N 回の戦闘後のあなたのレベルを出力してください。
期待する出力は 1 行からなります。
整数で出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
条件

すべてのテストケースにおいて、以下の条件をみたします。

  • ・1 ≦ N ≦ 100,000
  • ・1 ≦ L ≦ 10,000
  • ・1 ≦ x_i ≦ 10,000 (1 ≦ i ≦ N)
入力例1
5 10
5
11
20
8
7
出力例1
11
入力例2
3 9
10
4
4
出力例2
4

0

最後に

それぞれ

レベルがいくつになったか

順に(じゅんに)순서대로

戦う(たたかう)

戦闘を始める前

5 上昇し 25

戦闘後

変動(へんどう)

引き分け(ひきわけ)

敗北(はいぼく)

切り捨て

半分

勝利した側

戦闘(せんとう)

異なる(ことなる)
概念(がいねん)개념

a,b = map(int,input().split())
# print(a,b)
level_list=[int(input()) for i in range (a)]
# print(level_list)
for i in level_list:
    if b>i:
        b+=int(i/2)
    elif b<i:
        b=int(b/2)
    else:
        pass
print(b)

'TIL > Algorithm' 카테고리의 다른 글

C079:カードを集める  (0) 2024.04.23
C116:あたり棒の検査  (0) 2024.04.22
C034:先生の宿題  (0) 2024.04.09
C135:商品の割引  (0) 2024.04.07
C122:【2022年Xmas問題】プレゼントのセール  (0) 2024.04.07