下記のリンクの問題を解いていて,初めは10^9をすべて試してみたのですが全然間に合う気配がなかったので,考えて二分探索的にやれば短くなるなと思ったので書いてみました.
ですが.いくつかのケース(おそらくminあたりが原因ではないかと個人的に考えています)にて,出力が解答よりも1大きくなってしまいます.
公式解説にもこのような感じで解くと記述されていて,いくつかの提出済みのACのコードを見てみたのですが,どのようなところが自分のものと違うのかわからなかったので質問させていただきました.
問題
自分が書いたコード
C++
1#include<stdio.h> 2#include<iostream> 3#include<string> 4#include<memory> 5#include<cmath> 6#include<algorithm> 7#include<vector> 8#include<unordered_map> 9int main(){ 10 long long A,B,X; 11 std::cin >> A >> B >> X; 12 int min = 0; 13 int max = 1000000001; 14 int mid; 15 while(min + 1 < max){ 16 mid=(max + min) / 2; 17 int order = GetDigit(mid); 18 long long cal = A * mid + B * order; 19 if(cal <= X) min = mid; 20 else max = mid; 21 } 22 std::cout << mid << std::endl; 23 return 0; 24}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/09/23 08:21
2020/09/26 01:29