C - POW Editorial by TumoiYorozu


\(A^C\)\(B^C\) の大小比較をするわけですが、\(C\) が0の場合を除き \(C\)の偶奇のみ重要なので、小さい\(C\)に置き換えて求める事もできます。

今回の制約では \(C>0\) なので、例えば \(C\) が偶数の場合は \(A,B\) を二乗に、違う場合はそのままの \(A,B\) の比較でAC出来ます。

解答例

#include <iostream>
using namespace std;

int main(){
    long long a, b, c;
    cin >> a >> b >> c;
    if(c % 2 == 0) {
        a *= a;
        b *= b;
    }
    cout << ( a>b ? ">" : a<b ? "<" : "=") << endl;
}

他にも亜種として、以下の例では \(C\) を 2 か 3 に置き換えています。 このコードの場合は \(C=0\) の場合でも対応できます。 このとき、愚直に pow 関数を使ってdoubleで比較をしても十分な精度でACできます。
また c = 2-(c%2) などの様にすれば、\(C\) を 2 か 1に置き換えできます。

※十分小さな \(C\) にすれば、GCC の場合は __int128_t という128bit 整数を使ったり、Python などの言語の場合は多倍長整数を使っても大丈夫です。

解答例

#include <iostream>
#include <cmath>

using namespace std;
int main(){
    int a, b, c;
    cin >> a >> b >> c;
    if (c > 2) c = 2 + (c % 2);

    double x = pow(a, c);
    double y = pow(b, c);
    cout << ( x>y ? ">" : x<y ? "<" : "=") << endl;
}

posted:
last update: