AtCoder Beginner Contest 340のC問題について
解決したいこと
AtCoder Beginner Contest 340のC問題について教えていただきたいです。C問題で以下のようなコードを書いたところ一部WAとなってしまいました。解説を見て自分のコードでは上手くいかない場合があるのは理解したのですが実際にどのような場合に正しく出力されないのか分からなかったので、具体的な入力数値などを用いて説明して頂けると幸いです。
発生している問題・エラー
該当するソースコード(C++)
# include<iostream>
# include<cmath>
# include <vector>
using namespace std;
int main(){
unsigned long x;
unsigned long total = 0;
unsigned long count = 0;
cin >> x;
unsigned long num = x;
while(num > (unsigned long)1){
count += 1;
unsigned long upper = num/2 + num % 2;
unsigned long lower = num/2 ;
if(upper == 2){
if(lower == 2){
total += x;
} else {
unsigned long k = pow(2,count);
total += (x % k) * 2;
}
} else if (upper == 1){
break;
} else{
total += x;
}
num = upper;
}
cout << total+x << endl;
}
自分で試したこと
- 問題文中に出てくる入力例を実際にコードテストで実行してみた→3つとも出力例と同じ値が出た
- 解説を読み直した。→ユーザー解答の方の対数を取る方針と自分のコードが近いように感じたがなぜ上手くいかないのかはわからなかった
0