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: