题解 CF305B 【Continued Fractions】

这题肯定不能暴力,精度太低。

我们考虑记录分子和分母。

如果最后结果分子和分母都对应相等,那我们就认为正确。

记得将P,Q也约分好。

约分就是将两个数同时除以他们的Gcd。

答案呼之欲出。

#include<bits/stdc++.h>
using namespace std;
typedef long long Ll;
Ll P,Q;
Ll Total;
Ll Array[101];
inline Ll GetGcd(Ll A,Ll B)
{
    return B==0?A:GetGcd(B,A%B);
}
inline void Offset(Ll &A,Ll &B)
{
    register Ll Gcd;
    Gcd=GetGcd(A,B);
    A/=Gcd;
    B/=Gcd;
}
int main(void)
{
    register int i;
    cin>>P>>Q;
    cin>>Total;
    for(i=1;i<=Total;i++)
    {
        cin>>Array[i];
    }
    Offset(P,Q);
    register Ll AnsA,AnsB;
    AnsA=Array[Total];
    AnsB=1;
    for(i=Total-1;i>=1;i--)
    {
        Offset(AnsA,AnsB);
        swap(AnsA,AnsB);
        AnsA=Array[i]*AnsB+AnsA;
    }
    if(P==AnsA&&Q==AnsB)
    {
        cout<<"YES"<<endl;
    }
    else
    {
        cout<<"NO"<<endl;
    }
    return 0;
}
View Code
posted @ 2020-08-08 14:28  Bushuai_Tang  阅读(62)  评论(0编辑  收藏  举报