質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

757閲覧

【競技プログラミング】Atcoder ABC013 C - 節制 のWAの原因

heppoko_pg

総合スコア2

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/09/04 03:35

編集2020/09/04 03:49

前提・実現したいこと

以下の問題について、以下提出ソースコードで4行のifブロックを削除するとWAが出る原因をご教授いただけますでしょうか。
また、WAが出るような入力として考えられるものがありましたら合わせてご教授いただけますでしょうか。
削除しない場合はACとなります。
よろしくお願いいたします。

Atcoder ABC013 C 節制

発生している問題・エラーメッセージ

以下提出ソースコードでACは出来たのですが、ソースコードコメントにある4行を削除すると9件のWAが出ます。
この4行の代わりに以下の行でcが1以上の場合をケアしているつもりですが、どんなケースがケア出来ていないかが分かりません。

cpp

1Y = max(0LL, Y);

提出ソースコード

cpp

1#include <bits/stdc++.h> 2using namespace std; 3#define ll long long 4#define rep(__x, __start, __end) for(int __x = __start; __x < __end; __x++) 5template <class T> bool chmin(T &a, T b) { if (a > b) {a = b; return true; } return false; } 6 7const ll INF = 10000000000000000; 8ll N,H,A,B,C,D,E; 9 10int main() { 11 cin >> N >> H >> A >> B >> C >> D >> E; 12 13 ll ans = INF; 14 rep(X,0,N+1) { 15 ll c = H + X*B - (N-X)*E; // 普通の食事だけをX回とった時のN日後の満腹度. 16 17 /* ここからの4行を除くと9件のWAが出る. */ 18 if (c >= 1) { 19 chmin(ans, X*A); 20 continue; 21 } 22 /* ここまで */ 23 24 ll a = 1 - c; 25 ll b = D+E; // 何も食べない日を1日質素な食事に変えるごとに増える満腹度. 26 ll Y = a/b + (a%b != 0); // 切り上げ 27 Y = max(0LL, Y); // <-- cが1以上の場合はここで担保している気がする 28 if (X+Y>N) continue; 29 chmin(ans, X*A+Y*C); 30 } 31 cout << ans << endl; 32 return 0; 33}

補足情報(FW/ツールのバージョンなど)

Atcoderでのコンパイラ

  • C++ (GCC 9.2.1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Text

12 1 23 3 2 1 2

正解は普通の食事一回の3ですが、if分を削除すると4になります。
Yの値が想定通りでないことも確認できるはずです。

投稿2020/09/04 05:41

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

heppoko_pg

2020/09/04 08:12

さっそくのお返事ありがとうございます! 確認いたします。
heppoko_pg

2020/09/04 15:21

おかげさまで無事理解できました。 大変勉強になりました、ありがとうございました! 自信を持って以下のように短く書いてACを取ることが出来ました。 aが負でかつa/bが0の場合にa%bが0とは限らない点を見逃していました。 ``` ll c = H + X*B - (N-X)*E; ll a = max(0LL, 1 - c); ll b = D+E; ll Y = a/b + (a%b != 0); ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問