0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

困ったWAの解決方法

Posted at

序文

あまり技術的な話ではないのですが、AtCoderで困ったWAの出方することありませんか?

自分はABC095 - Half and Halfを解いた際に出てきたのですが、
スクリーンショット 2025-03-16 21.02.04.png
↑この一個だけ間違っているケースめちゃくちゃ困りません??
自分は初めて出会したので対処が分からず、コードを書き直して、素直に全探索しました。

助けてくだs……

このような時どのような方法でロジックエラーを解決すればいいか、ご存知の方いらっしゃればコメントしてくださると幸いですm(_ _)m

↓以下、自分が提出した回答です。

a, b, c, x, y= map(int, input().split())
C= c*2
pay_for= 0
if a+b<= C:
    pay_for= a*x+ b*y
else:
    if x> y:
        pay_for= y*C+ (x-y)*a
        for i in range(x-y):
           estimate= C*(x-i)+ a*i
           if estimate< pay_for:
               pay_for= estimate     
        
    else:
        pay_for= x*C+ (y-x)*b
        for i in range(y-x):
           estimate= C*(y-i)+ a*i
           if estimate< pay_for:
               pay_for= estimate     
        
print(pay_for)

自分は、最初a+bc*2の大小関係に着目することで計算量を減らせると考えました。
その後の場合分けで、a+b< Cの時に、ピッタリ a:X枚、b:Y枚になるように買うパターンと、
ABピザを多めに買って、各々max(X, Y)枚のピザを買うパターンに気付き、
一応多めに買う方を全探索で出費を最小化するプログラムを書きました。

結果的に、何か探索漏れがあったのか一個だけWAを出してしまいました。

参考までに

その後コードを書き直して提出したら、難なくACをもらいました。
正直、上記のコードの何が悪かったのかがあまり分からないです……

a, b, c, x, y= map(int, input().split())
C= c*2
pay_for= 10**10
if x> y:
    for i in range(x+1):
        z=i
        if i< y:
            estimate= C*z+ a*(x-z)+ b*(y-z)
        else:
            estimate= C*z+ a*(x-z)
            
        if estimate< pay_for:
            pay_for= estimate

else :
    for i in range(y+1):
        z=i
        if i< x:
            estimate= C*z+ a*(x-z)+ b*(y-z)
            
        else:
            estimate= C*z+ b*(y-z)     
        if estimate< pay_for:
            pay_for= estimate
            
print(pay_for)

①:a+bc*2の大小関係の場合分けで、場合分けに漏れがある。
②探索回数がx-yy-xだったので、探索漏れがある。
のどちらかなんですけど、分からねえ……

結論

男は黙って全探索‼️👊

ご高覧ありがとうございましたm(_ _)m

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?