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?

atcoder練習(2024.11.29)

Posted at

キーワード

-1,

問題

問題文

不思議なボタンがあります。
このボタンを押すと飴を1つもらえますが、前回飴をもらってからの経過時間がC秒未満である場合はもらえません。
高橋君はこのボタンをN回押してみることにしました。
i回目にボタンを押すのは今からTi​秒後です。
高橋君は何個の飴をもらうことができますか?

制約

1≤N≤100
1≤C≤1000
0≤T1​<T2​<⋯<TN​≤1000
入力は全て整数

入力

入力は以下の形式で標準入力から与えられる。
N C
T1​ T2​ … TN​

出力

高橋君がもらうことのできる飴の個数を出力せよ。

入力例 1

6 5
1 3 7 8 10 12

出力例 1

3

高橋君はボタンを 6 回押します。
1 回目(今から 1 秒後):初めてボタンを押すときは必ず飴を 1 つもらえます。
2 回目(今から 3 秒後):前回飴をもらってからの経過時間が 3−1=2<C 秒なので、飴はもらえません。
3 回目(今から 7 秒後):前回飴をもらってからの経過時間が 7−1=6≥C 秒なので、飴を 1 つもらえます。
4 回目(今から 8 秒後):前回飴をもらってからの経過時間が 8−7=1<C 秒なので、飴はもらえません。
5 回目(今から 10 秒後):前回飴をもらってからの経過時間が 10−7=3<C 秒なので、飴はもらえません。
6 回目(今から 12 秒後):前回飴をもらってからの経過時間が 12−7=5≥C 秒なので、飴を 1 つもらえます。
よって、高橋君は飴を 3 個もらうことができます。

入力例 2

3 2
0 2 4

出力例 2

3

入力例 3

10 3
0 3 4 6 9 12 15 17 19 20

出力例 3

7

回答

n, c = map(int, input().split())
t = list(map(int, input().split()))
key = []
key.append(t[0])

for i in range(1,len(t)):
  if t[i] - key[-1] >= c:
    key.append(t[i])

print(len(key))

参考

備考

  • 分かりませんでした。人のを参考にしました。himan様ありがとうございます。
  • 単純に引いた値をcと比較すればいいのだが、飴がもらえない時にはそれ以前の値を引かないといけないのがポイント、そこの実装ができなかった。
  • ifなどの条件分岐で書こうと思ってたけど、それだと機械的になって、さまざまなパターンに対応できなくなるのが問題。
  • 他の人のコードを見る限り、ほとんど同じような仕様になっている。
  • どうやら、for文を使うときはlist[-1]が動的に動いて便利らしい。確かにこれだと値の変化に対応することができる。
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?