B - Geometric Sequence 解説
by
kyopro_friends
以下のような解法の場合、long double(80bit浮動小数点数、128bit浮動小数点数)を用いても、誤差によりWAとなるケースが存在します。
r=A[1]/A[0]
if all(A[i]*r==A[i+1]):
print("Yes")
else:
print("No")
具体的には
3 61058596 7814 1などです。出典
実装例(C++)
// このコードを提出するとWAになります
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<int>a(n);
for(auto&x:a)cin >> x;
long double r=(long double)a[1]/a[0];
for(int i=0;i<n-1;i++){
if(a[i]*r!=a[i+1]){
cout << "No";
return 0;
}
}
cout << "Yes";
}
投稿日時:
最終更新: