【AtCoder】ABC372【灰】

Поделиться
HTML-код
  • Опубликовано: 11 ноя 2024

Комментарии • 8

  • @パンジャンドラムパンサー
    @パンジャンドラムパンサー Месяц назад +1

    ABC372お疲れ様でした〜!
    ∑はただ単に総和を取るという意味の記号なので∑と言えば等差(等比)数列と考えてしまうのは良くないかもです

  • @sincostanvec
    @sincostanvec Месяц назад +1

    今週もお疲れ様です!
    Σ顔文字は笑いましたwΣ(゚∀゚ノ)ノ

    • @WillowLog
      @WillowLog  Месяц назад +1

      一部の数学記号には親しみがあります😂親しみは!

  • @YukoAmamiya339
    @YukoAmamiya339 Месяц назад +1

    今回のB問題は要するに、「数Mを、3のn乗で表される数(3^0=1 ,3^1=3 ,3^2=9 ,3^3=27...)の合計だけで作って、使った数の肩の部分(指数)を全部出せ」ってものだったんですね。Σの意味がわからなくても、問題文の3^Ai乗でどこかで3^nの数を使うんだろうという推測と、出力例2で「3^2+3^0+3^2+3^4=9+1+9+81=100」で入力と一致することに気づけば勝機があったかもしれませんねー。ここの問題やたらと日本語が難しかったりするので、そういうときは入出力サンプルから何をすればいいのか推測する方法も考えてみるとよろしいかと思われます。

  • @DDincrement
    @DDincrement Месяц назад +1

    開始5分後の私「あ、WillowLogさんB問題無理だなこれ」

    • @DDincrement
      @DDincrement Месяц назад +1

      18:33 出力が見えていないので推測ですが、これ error じゃなくて warning じゃありませんでした?
      コンピュータくん「この文、実行しようと思えばできるけど、本当にこれ意図した通り?」ってことじゃないかと思います。
      原因は .size() にあって、こいつ、返り値が int 型じゃなくて size_t 型なんです。
      なので、「i < s.size(); って型の違う比較だけど大丈夫?あってる?」と聞かれています。
      簡単な対策は 3 パターンですかね。
      その1、size_t i = 0; で宣言する。ただ、i を大きい方から回すループを書くときに事故りやすいリスクあり。
      その2、一旦 int n = s.size(); で int 型に収めて、i < n でループさせる。多分初心者には一番無難。
      その3、warning が出るけど無視する。実行しようと思えばできるので、ちゃんと実行してくれる。他に error があったときにメッセージが混ざるので混乱を招きがち。
      33:15 std::out_of_range は、実行中に .at(i) で見ようとした場所が範囲外だった場合のエラーです。
      後半に 2 回の which is で書いてあるのが、「1 番目を見ろって言われても、0 個しかないですやん」という意味ですね。
      12 行目の右辺、s.at(i) にするべきだったところ、誤って ans.at(i) にしてしまっているために発生しています。
      書いたコード通りに動かすと、0 個しかないものの 1 番目(人間的には2番目)を見ようとすることをぜひご自身で確認してみてください。
      あと、このコード、せっかく頑張って ans を作り上げたのに出力には s の方を投げるバグもありますね。

    • @WillowLog
      @WillowLog  Месяц назад

      AC!!!!!

    • @DDincrement
      @DDincrement Месяц назад +1

      A 問題は AC でも B 問題撃沈してますやーん!
      まあ、「B 無理だな」ってのは、裏側に「A は突破して B の問題見るところまでは行けるんだろうな」を含んでるということで……。
      とはいえ、高校数学で Σ の扱いを習ってない状態スタートでここまで前進できたのはすごいですね。
      Σ[k=1,3] 2k (私は「しぐま、けーいこーるいちからさんまでの、にけー」と読みます)を自力で理解して計算したのはすごい!
      あとは、数学記法とプログラム記法の対応をググってヒットさせられればワンチャン B 突破まであったかもしれませんね。
      いや、等差数列(この問題とは関係ない)に向かったから難しいか……?
      数学でいう A[i] は、C++でいう vector の A.at(i) とほぼ同じです。
      違いは、数学の A[i] は 1 番目スタートなところ。
      Σ[k=1,N] ほにゃらら は for (i=1; i