AtCoder入門 3-3

ABC

問題リンク↓

回答

回答リンク↓

振り返り



ABC 220 b

問題リンク↓
B - Base K

回答

回答リンク↓
Submission #41598161 - AtCoder Beginner Contest 220

振り返り

  • 答えをint型でやってたら最初 WA がでた
  • 10 ^9 以上になりうるならば long long 型にするのが良さそう。


ABC 090 b

問題リンク↓
B - Palindromic Numbers

回答

回答リンク↓

Submission #41597002 - AtCoder Beginner Contest 090

振り返り

  • エディタに考えを書きながらコーディングしてみた。
  • 結構いい感じかもなので続けてみる。
  • string型久しぶりに扱って忘れてたけど、ぱぱっと調べながらできてよかった。
    • 文字列長取得できるよね?とか、配列的にアクセスできるよね?とからへんは覚えてたのはよかった。

ABC 068 b

B - Break Number

回答

Submission #41596543 - AtCoder Beginner Contest 068

振り返り

  • 特になし。

ABC 093 B B - Small and Large Integers

回答

Submission #41528487 - AtCoder Beginner Contest 093

振り返り

  • もっと瞬殺で解ける様になりたい
  • 頭の中だけで考えると全然考えがまとまらないので、今わかっている範囲で良いので、まずは書き出して行くことが大事だと思う。
  • いきなり最適解を出す必要はなくて、分かっている条件とかパターンをつらつらと書き出していって、書き出したあと、まとめれるところまとめてきれいにすれば良いんだと思う。

ABC 208 B B - Factorial Yen Coin

回答

Submission #41501940 - AtCoder Beginner Contest 208

振り返り

  • 急に難易度高くない?
  • 少し時間かかったが、答えみずにとけた。
  • vectorの使い方とか忘れていた。添字で一個ミスってた。よくありがち。
  • 解説見ると難しいこと書いてあった。あとでよむと良いかも。

ABC 164 B - B - Battle

回答

Submission #41480333 - AtCoder Beginner Contest 164

振り返り

  • とくに振り返ることなし。

ABC 200 B - B - 200th ABC-200

回答

Submission #41464806 - KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)

振り返り

  • なんなく正解できた。
  • もっとも大きい答えの場合のデータサイズの見積もりについては、あまり考慮できていない。
  • とりあえず long longでやっときゃいけるやろ。とざっくり解いてしまっている。

ABC162 B - FizzBuzzSum

  • ansの型をどうすれば良いのかわからなくてchatgptに質問した
  • 結果、long long型にすればOKだった。
  • はじめはdouble型にしていたが、倍精度浮動小数点になるので、2.66666e+11 とか出力されて駄目だった。
  • longlong型は64bit整数型なので、答えは絶対整数になるはずだし、それでOKだった。

ABC206 B - Savings

問題

B - Savings

回答

Submission #41273909 - AtCoder Beginner Contest 206(Sponsored by Panasonic)

振り返り

  • どの型だったら答えの値の最大値でも耐えうるかわからんかったのでとりあえずlong long型とした
  • long long型の最大値はLONG_LONG_MAXでいけた。
  • 問題自体は独力で解けた。

ABC165 B - 1%

問題

B - 1%

回答

Submission #41310512 - AtCoder Beginner Contest 165

振り返り

  • 正解できず。
  • ans = ans * 1.01; はNG
  • ans = ans + ans /100; はOK
  • その違いは、小数点以下切り捨てるかどうか
  • ChatGPTさんいわく下記

これらの2つのコードの主な違いは、入力値xに到達するまでansを増加させる方法にあります。

  • コード1では、ansはその値の1%を加算することで増加します(ans = ans + ans / 100;)。この方法は整数算術を使用していて、ans / 100が整数除算であるため、小数点以下の値は切り捨てられます。したがって、この方法ではansの増加はかなり遅くなります。

  • コード2では、ansはその値を1.01倍することで増加します(ans = ans * 1.01;)。これは浮動小数点数算術を使用しており、ansの増加はより速くなります。

したがって、入力値xが非常に大きい場合(例えば、あなたが提供したような974755271730884810)、コード1はコード2よりもはるかに多くのループを必要とします。これは、コード1がansの増加を整数算術で計算するため、小数点以下の値が切り捨てられ、増加が遅くなるためです。


  • ans * 101 / 100;はNGだった。大きくなりすぎるのか?
  • 少数切り捨てというところを正しく汲み取る必要がある。
  • 1.01で割った瞬間、浮動小数点演算になってしまうので、少数切り捨てじゃなくなっちゃうらしい
  • 丸め誤差が発生しちゃうよ。ということらしい