cf 305B
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; }