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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

582閲覧

AtCoderABC146 CでWAになる原因

sub_machida

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/27 08:49

問題はこちらです
ソースコードを提出した際に、2つWA判定がついてしまい、自分では原因が特定できませんでした。

Python3

1a, b, x = list(map(int, input().split())) 2 3k = 0 4for i in range(1, 10): 5 kN = (x / a) - (b * i / a) 6 if kN < 1: # 買えるものがない 7 k = 0 8 break 9 if len(str(int(kN))) == i: 10 k = int(kN) # 切り捨て 11 break 12else: 13 k = 1000000000 14 15print(k)

していることは、
x >= a * n + b * d(N)より、
n <= x / a - b * d(N) / Aと変形し、この条件を満たす最大のnを求めます。
この際に、d(N)の桁数をiと置き、仮定しkNの整数部分の桁数がiと一致するか否かで判定しています。

何かお気づきになられた点がありましたら、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく割り算の計算を浮動小数点でやってることで誤差が出ています。
この問題ではxの値が10 ** 18と相当大きいので倍精度の浮動小数点でも精度が足りません。

Python

1byFloat = int((10 ** 18 - 1) / 10 ** 9) 2byInt = (10 ** 18 - 1) // 10 ** 9 3print(byFloat) #=> 1000000000 4print(byInt) #=> 999999999 5 6#もっとわかりやすい例でいえば 7print(int(999999999999999999.0)) #=> 1000000000000000000

式を変形して整数の割り算として書き直せば回避できます。

投稿2019/11/28 17:15

yudedako67

総合スコア2047

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

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

sub_machida

2019/11/29 01:42

助かりました、ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問