回答編集履歴

3

追記の表現を正確にしました。

2020/08/23 13:17

投稿

auto-blue
auto-blue

スコア9

test CHANGED
@@ -20,6 +20,6 @@
20
20
 
21
21
  片方のピザを余らせた場合に値引きをしてしまっているからです。
22
22
 
23
- もし```A!=B```なら、```numA-i```または```numB-i```が負になります。
23
+ もし```A!=B```なら、```numA-i```または```numB-i```が負になることがあります。
24
24
 
25
25
  つまり、このコードだと余ったピザ分だけ値引きしていることになってしまいます。

2

なぜ質問のコードでACとならないかについて追記します。

2020/08/23 13:16

投稿

auto-blue
auto-blue

スコア9

test CHANGED
@@ -11,3 +11,15 @@
11
11
  Aを揃えるのに、```A>2C```ならBは無駄になってもCを```2*(max(X,Y)-min(X,Y))```枚買った方が安いです。
12
12
 
13
13
  もし```A<2C```ならAを直接```max(X,Y)-min(X,Y)```枚買った方が安いです。
14
+
15
+
16
+
17
+ --追記--
18
+
19
+ なぜ質問のコードでACとならないかについて追記します。
20
+
21
+ 片方のピザを余らせた場合に値引きをしてしまっているからです。
22
+
23
+ もし```A!=B```なら、```numA-i```または```numB-i```が負になります。
24
+
25
+ つまり、このコードだと余ったピザ分だけ値引きしていることになってしまいます。

1

場合わけを詳しくしました

2020/08/23 13:15

投稿

auto-blue
auto-blue

スコア9

test CHANGED
@@ -1,5 +1,13 @@
1
1
  なぜそのコードで通らないかは分かりませんが、もう少しうまい場合分けができそうです。
2
2
 
3
- ```A+B<=2C```の時、ABのピザを買うメリットはないので、答えは```A*X+B*Y```
3
+ ```A+B<=2C```の時、ABのピザを買うメリットはないので、答えは```A*X+B*Y```です。
4
4
 
5
- ```A+B>2C```の時、ABのピザを買えば買うほど安くなるので、```A*(X-numMAX)+B*(Y-numMAX)+C*numMAX```
5
+ ```A+B>2C```の時、ABのピザを買えば買うほど安くなるので、AがXを、BがYを超ない最大の```2 * min(X,Y)```枚買うとします。
6
+
7
+ さらに、XとY大きい方のピザを```max(X,Y)-min(X,Y)```枚を買う必要があります。
8
+
9
+ 仮に、Xの方が大きかったとしましょう。
10
+
11
+ Aを揃えるのに、```A>2C```ならBは無駄になってもCを```2*(max(X,Y)-min(X,Y))```枚買った方が安いです。
12
+
13
+ もし```A<2C```ならAを直接```max(X,Y)-min(X,Y)```枚買った方が安いです。