Codeforces#333 Div2 A問題

はじめに

Codeforces Round #333 Div. 2 Prob. A. Two Bases

問題:http://codeforces.com/contest/602/problem/A

解けなかったのでブログに書いておく。

考え方

やるだけ

全部mainに書いていたら、入力を受け取るvectorの初期化時に、サイズを添えるコンストラクタ呼び出しで変数を間違えた。vector<int> x(n),y(n);とかしていた。

x用のvectorの宣言時に、mの入力を受け取ることはできないのでまとめて書くことはできない。

入力も含めて同じものの繰り返しなら関数にまとめたほうが良いという知見を得た。

進数変換もたまにバグるし暇なときにライブラリぺたりんこできるようにしておきたい。

解答

毎回binpowするのは頭悪いけどA問題だし適当でよい

#include <iostream>
#include <limits>

using namespace std;

template<class T = long long>
T binpow(T a, int n, T mod=std::numeric_limits<T>::max()){
  if(n==0){
    return 1;
  }else if(n%2==1){
    return (binpow(a,n-1)*a)%mod;
  }else{
    T b = binpow(a,n/2);
    return (b*b)%mod;
  }
}

long long calc(){
    long long n,bx,xi;
    cin >> n >> bx;

    long long xnum=0;
    for(int i = 0; i < n; ++i){
        cin >> xi;
        xnum+=binpow(bx,n-i-1)*xi;
    }
    return xnum;
}

int main() {
    cin.tie(nullptr); ios::sync_with_stdio(false);

    long long x = calc();
    long long y = calc();

    if(x==y){
        cout << "=" << endl;
    }else if(x<y){
        cout << "<" << endl;
    }else if(x>y){
        cout << ">" << endl;
    }
    
    return 0;
}

テストケース

2 10
4 7
6 2
1 0 1 1 1 1
>>> =