質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1187閲覧

AtCoderのプログラミング問題で、誤答(WA)となる理由がわかりません。

ororokun

総合スコア7

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/05 08:17

前提・実現したいこと

AtCoderのこのC問題で以下のコードを提出したのですが、WAとなるテストケースが2つあります。

公式の解説と私の想定するロジックが少し異なるため、根本的な部分から間違えているかもしれません。
私の考えはソースコードにコメントで記載いたしました。

コードのどの点が誤りか、もしくはどのようなケースでエラーとなるかをご教授ください。
よろしくお願いいたします。

該当のソースコード

Python3

1n=int(input()) 2a=list(map(int,input().split())) 3a.insert(0,0) 4# マスの左側から順に隣接するマスを比較する。 5# 隣り合う右のマスより高いマスがある場合、高さを1低くする。 6for i in range(n): 7 if a[i]>a[i+1]: 8 a[i]-=1 9# 再び隣接するマスの比較を行う。 10# 隣り合う右のマスより高いマスがある場合は"No"を表示する。 11for i in range(n): 12 if a[i]>a[i+1]: 13 print("No") 14 exit() 15print("Yes")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1,2,2,1
のようなケースで考えると、これは2つある2を1ずつ下げればいいので、答えはYesになります。
ところが、このケースにこのロジックを適用すると、(以下、左から1番目、2番目、と数えることにします。)
2番目は3番目より大きくないのでそのままになり、3番目は4番目より大きいため1下がります。
結果、1,2,1,1というデータになり、単調非減少にならないため、Noという結果になります。

投稿2019/12/05 09:09

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ororokun

2019/12/05 09:37

納得いきました! わかりやすい説明をしていただき、ありがとうございます。
guest

0

それは嘘貪欲です。

if a[i]>a[i-1]: a[i]-=1

が正しいです。

投稿2019/12/05 08:43

ruei

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問