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.

AtCoderログ:0014 - ABC 209 A

Last updated at Posted at 2021-07-11

問題:ABC 209 A - Counting

問題文

$A$ 以上かつ $B$ 以下の整数はいくつありますか?

制約

・$1 \le A \le 100$
・$1 \le B \le 100$
・$A,B$ は整数である。

回答1 (AC)

$1$ 以上 $N$ 以下の整数の個数は $N$ 個なので、$A$ 以上 $B$ 以下の整数の個数は「($1$ 以上 $B$ 以下の整数の個数) - ($1$ 以上 $A-1$ 以下の整数の個数)」と考えて、$B-(A-1)$ 個となります。条件から $A>B$ の場合もあり得るので、この場合は $0$ 個を答えるような場合分けが必要となります。計算量は $O(1)$ です。
私が ABC 209 に参加したときの提出コードは同じ方針でしたが、$A>B$ の場合を見逃していて誤答を繰り返してしまいました。

abc209a-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int a, b;
  cin >> a >> b;
 
  if ( a>b ) {
    cout << 0 << endl;
  } else {
    cout << b-a+1 << endl;
  }
}

回答2 (AC)

for 文を使って整数の個数を素直に数える方法も考えられます。この場合、$A>B$ のときには for 文が実行されないだけなので、回答1のような場合分けは不要です。コードは以下のようになりますが、計算量は $O(B-A)$ となってしまうため、$A, B$ の値が巨大な場合にはうまくいかない可能性があります。

abc209a-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int a, b;
  cin >> a >> b;
 
  int integer = 0;
  for ( int i=a; i<=b; i++ ) {
    integer += 1;
  }
  
  cout << integer << endl;
}

調べたこと

AtCoder の解説公式解説

回答1と同じ方針でした。max(0,b-a+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?