标签:
Description
A continued fraction of height n is a fraction of form
. You are given two rational numbers, one is represented as
and the other one is represented as a finite fraction of height n. Check if they are equal.
Input
The first line contains two space-separated integers p, q(1 ≤ q ≤ p ≤ 1018) — the numerator and the denominator of the first fraction.
The second line contains integer n(1 ≤ n ≤ 90) — the height of the second fraction. The third line contains n space-separated integersa1, a2, ..., an(1 ≤ ai ≤ 1018) — the continued fraction.
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64dspecifier.
Output
Print "YES" if these fractions are equal and "NO" otherwise.
Sample Input
9 4
2
2 4
YES
9 4
3
2 3 1
YES
9 4
3
1 2 4
NO
Hint
In the first sample
.
In the second sample
.
In the third sample
.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
using namespace std;
#define LL long long
LL n,a[110],p,q;
int main()
{
bool flag=false;
cin>>p>>q>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
double res=(double)(p)/q-a[i];
if(!res&&i==n-1)
{
printf("YES\n");
flag=true;
}
else if(res>0&&res<=1)
{
p=p-q*a[i];
LL temp=p;
p=q;
q=temp;
}
else
{
flag=true;
printf("NO\n");
break;
}
}
if(!flag)
printf("NO\n");
return 0;
}
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4217929.html