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ログ:0080 - ABC 214 B

Posted at

問題

問題文

$a+b+c \le S$ かつ $a \times b \times c \le T$ を満たす非負整数の組 $(a,b,c)$ はいくつありますか?

制約

・$0 \le S \le 100$
・$0 \le T \le 10000$
・$S,T$ は整数である。

回答

回答1 (AC)

非負の整数 $a,b,c$ は $a+b+c \le S \le 100$ を満たすので、$a,b,c$ の最大値は $100$ です。そこで $a,b,c$ をそれぞれ $0$ から $100$ まで変化させ、2つの条件を満たす組を数えるという、全検索の問題として解くことが出来ます。繰返し回数は $100^3=10^6$ となるので、時間内の処理が可能です。コードは以下のようになりました。

abc214b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int s, t;
  cin >> s >> t;

  int answer = 0;
  for ( int a=0; a<101; a++ ) {
    for ( int b=0; b<101; b++ ) {
      for ( int c=0; c<101; c++ ) {
        if ( a+b+c<=s && a*b*c<=t ){
          answer += 1;
        }
      }
    }
  }

  cout << answer << endl;
}

回答2 (AC)

解答1のコードをちょっとだけ改良します。$a+b+c \le S$ より $a$ の最大値は $S$ であることがわかるので、a に関する for 文は a=0 から (a<101 ではなく) a<s+1 まで変化させれば十分です。$S \le 100$ なので、検索範囲が狭まっていることがわかります。

同様に、$b$ の値の最大値は $S-a$ なので、b に関する for 文は b=0 から b<s-a+1 まで変化させれば十分です。$c$ についても同様です。以上をまとめたコードは以下のようになりました。

abc214b-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int s, t;
  cin >> s >> t;

  int answer = 0;
  for ( int a=0; a<s+1; a++ ) {
    for ( int b=0; b<s-a+1; b++ ) {
      for ( int c=0; c<s-a-b+1; c++ ) {
        if ( a*b*c<=t ){
          answer += 1;
        }
      }
    }
  }

  cout << answer << endl;
}

調べたこと

AtCoder の解説公式解説

回答2と同じ方針です。サンプルコードの8行目の「for(int b = 0; a+b <= S; b++){」という書き方を初めて知りました。

AtCoder の解説 → [ユーザ解説](https://blog.hamayanhamayan.com/entry/2021/08/15/034508

)
回答1と回答2の中間くらいの方針でした。

リンク

前後の記事

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?