LoginSignup
1
1

More than 3 years have passed since last update.

競技プログラミング is 何(おまけ)

Posted at

本記事は、競技プログラミング is 何のおまけ記事です。

実装するとしたら、のソースコードをのせた記事になります。

pythonをやってない人にもある程度わかりやすいように、
(競プロ的には)冗長なコードになっている箇所もありますが、ご容赦を。

単純な解法

# coding: utf-8
# 標準入力取得の高速化のpython用おまじない
import sys
input = sys.stdin.readline

# 標準入力を数値変換しながら取得
N = int(input())
# 標準入力を配列&数値変換しながら取得
H = [int(x) for x in input().split()]

# 各マスに降り立った時の最大移動可能距離を計算していく
# 移動可能距離の格納用変数の定義
ans = []

# 開始位置を先頭からずらしていく
for i in range(N):
    count = 0
    # 開始位置からどの程度移動可能か確認していく
    for j in range(i,N-1):
        if H[j] >= H[j+1]:
            # 移動可能なら移動可能距離を増やす
            count += 1
        else:
            #移動不可なら終了
            break
    # 移動可能距離一覧へ追加する
    ans.append(count)

# 回答の表示
print(max(ans))

最適な解法

# coding: utf-8
# 標準入力取得の高速化のpython用おまじない
import sys
input = sys.stdin.readline

# 標準入力を数値変換しながら取得
N = int(input())
# 標準入力を配列&数値変換しながら取得
H = [int(x) for x in input().split()]
# ここまでは一緒

# 処理様の変数定義
max_count = 0
tmp_count = 0

# 先頭から見ていく
for i in range(N-1):
    if H[i] >= H[i+1]:
        # 移動可能なら距離カウントをふやす
        tmp_count += 1
    else:
        # 移動不可時はその時点までの移動可能距離と
        # 現在の最大移動可能距離を比較
        if tmp_count > max_count:
            # 今回の移動可能距離の方が大きいので更新する
            max_count = tmp_count
        # 現時点の移動可能距離をリセットする
        tmp_count = 0

# ループ終端が、N-1なので、とある地点から右端まで移動可能な場合は、
# その移動距離と最大移動可能距離との比較が行われていないため、
# maxを使用してより大きい方の値を回答として使用する
print(max(max_count,tmp_count))
1
1
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
1
1