回答
誤差が出てダメな奴(WA)
http://codeforces.com/contest/602/submission/14591541
OKなの
http://codeforces.com/contest/602/submission/14592339
与えられる2つの整数値の大小を判定する問題.
しかし,与えられる数値は指定された進数で,各桁ごとの数値が渡される形式で与えられる.
例えば,
10 16 15 15 4 0 0 0 0 7 10 9
みたいな感じだと,16進数10桁の数値が与えられて,前から10桁目の値,9桁目の値,のように与えられる.
なので,この数値を10進数に直し,比較することを考える.
(ちなみに,40進数の10桁とかくることがあるので,long long型で計算しないとダメです)
n進数の数値を10進数に直すには,例えば
3 16 5 4 2
のとき,5 * 16^2 + 4 * 16^1 + 2 * 16^0 のように計算ができる.
なので,これをfor文を用いて計算する.
しかし,標準のpow関数を用いてしまうと,pow関数の元々の返り値はdouble型であるので,計算結果に誤差が出る場合があり,落ちてしまうことがある.
(それが上記に貼った誤差が出てダメな奴のこと)
そこで解決方法としては,10^-6など小さな数値を足す方法と,整数の場合のpow関数を自作することが考えられる.
特に理由はないですが,試しに実装してみたいという気持ちがあったので,自作のpow関数を私は定義することにしました.
こんな感じ.
ll mypow(ll num, int index) { ll ret = 1; REP(i, index) ret *= num; return ret; }
指数indexがマイナスの場合とか考慮してないです(小声).
というわけで,自作したpow関数を用いつつ,2つの数値を10進数に変換して,比較すればよいでしょう.
終わり.
ll mypow(ll num, int index) { ll ret = 1; REP(i, index) ret *= num; return ret; } int main(){ cin.tie(0); ios::sync_with_stdio(false); cout.precision(16); ll nums[2] = {0, 0}; REP(i, 2) { int inp, decimal; cin >> inp >> decimal; int array[inp]; REP(j, inp) cin >> array[j]; RREP(j, inp) { nums[i] += array[j] * mypow(decimal, inp-j-1); } } if(nums[0] == nums[1]) { cout << "=" << endl; } else if(nums[0] < nums[1]) { cout << "<" << endl; } else { cout << ">" << endl; } return 0; }