×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
AOJ 0186 Aizu Chicken 解説 @kagamiz
Slide 2
Slide 2 text
問題概要 ● ?????? ● 問題文クソ難しいんだよね ... ● 頑張って読む
Slide 3
Slide 3 text
問題概要 ● あなたには予算が b 円あります . ● 会津地鶏が 1 個 c1 円 , ふつうの鶏肉が 1 個 c2 円で 買える . ● ただし , 会津地鶏は q2 個までしか買えない .
Slide 4
Slide 4 text
問題概要 ● 鶏肉が足りなくなると困るので、 q1 個以上の鶏肉を買 う . ● 予算の許す範囲で会津地鶏をできるだけ多く買う ( 会津 地鶏は 1 個以上買わなければならない ). ● 会津地鶏を買った残りでふつうの鶏肉をできるだけ多く 買う ( 予算が足りなければ買わない ).
Slide 5
Slide 5 text
アルゴリズムの考察 ● 1. まず , できるだけ会津地鶏を買う . ● 2. 残ったお金で普通の鶏肉を買う . ● 3. q1 個より多くなるまで , 会津地鶏を 1 個ずつ売りな がら普通の鶏肉を買う . ● 4. 会津地鶏が 0 個になったら , お母さんの言う通りに 買えないので NA を出力する . そうじゃなければ個 数を出力 .
Slide 6
Slide 6 text
アルゴリズムの計算量 ● “3. q1 個より多くなるまで , 会津地鶏を 1 個ずつ売り ながら普通の鶏肉を買う ." ● これやばそう? ● 実はそうでもない ( 各変数 ≦ 10^6 なので , ループは 最悪でも 10^6 しか繰り返されない .)
Slide 7
Slide 7 text
実☆装 ● できるだけ " アルゴリズムの考察 " の項に素直に . – 複雑な事をするとバグります
Slide 8
Slide 8 text
実☆装 ● 1. まず , できるだけ会津地鶏を買う . ● 2. 残ったお金で普通の鶏肉を買う . – aChick... 会津地鶏 bchick... 普通の鶏肉 aChick = min(b / c1, q2); b -= aChick * c1; bChick = max(0, b / c2); b -= bChick * c2;
Slide 9
Slide 9 text
実☆装 ● 3. q1 個より多くなるまで , 会津地鶏を 1 個ずつ売りな がら普通の鶏肉を買う . while (aChick + bChick < q1 && aChick){ b += c1; b += bChick * c2; bChick = b / c2; b -= bChick * c2; aChick--; }
Slide 10
Slide 10 text
実☆装 ● 4. 会津地鶏が 0 個になったら , お母さんの言う通りに 買えないので NA を出力する . そうじゃなければ個 数を出力 . if (aChick){ printf("%d %d\n", aChick, bChick); } else { printf("NA\n"); }