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";
}

投稿日時:
最終更新: