首页 > 其他分享 >codeforces 305B. Continued Fractions (递归的思想)

codeforces 305B. Continued Fractions (递归的思想)

时间:2022-10-11 23:32:32浏览次数:86  
标签:Fractions include 递归 int 305B codeforces cin 105000000000078855


​http://codeforces.com/problemset/problem/305/B​

大致题意:问

codeforces 305B. Continued Fractions (递归的思想)_#include

是否等于

codeforces 305B. Continued Fractions (递归的思想)_#include_02


开始直接用浮点递归处理。。。结果可想而知。


再一次出现运行结果不一样的问题:


对于数据:


39088169 2415781736 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2


39088169 24157817


36


1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2


YES



结果在codeforces测评机上的结果是:


codeforces 305B. Continued Fractions (递归的思想)_递归_03


可能真和机器相关。



浮点问题横亘在前方。。。这个方案作罢。


其实我们知道它一定和递归有点关系,继续探索发现。。。


我们看一个简单的等式:


codeforces 305B. Continued Fractions (递归的思想)_递归_04

把它上下翻转一下呢?

codeforces 305B. Continued Fractions (递归的思想)_递归_05


是的,等号右边新的分数,等号左边的加式都和原来有一定的相似度,递归就这样形成了


这样迭代下去,如果是相等的,那么右边一定是等于0的



写的时候注意这样的陷阱:


跳出语句不要这样写:


if(q==0||a[i]*q<0||a[i]*q>p) break;


105000000000078855*105000000000078855=262882295792523313


是的,我亲测了。


cin>>p;


cout<<p*p<<endl;


105000000000078855


262882295792523313



#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
LL a[100],p,q,n;
int main()
{
//freopen("cin.txt","r",stdin);
while(cin>>p>>q){
scanf("%I64d",&n);
for(int i=0;i<n;i++){
scanf("%I64d",&a[i]);
}
int i=0;
for(i=0;i<n;i++){
if(q==0||p/q<a[i]) break;
p=p-a[i]*q;
LL t=p;
p=q;
q=t;
}
if(i==n&&q==0) puts("YES");
else puts("NO");
}
return 0;
}



标签:Fractions,include,递归,int,305B,codeforces,cin,105000000000078855
From: https://blog.51cto.com/u_15746559/5748434

相关文章

  • Codeforces Round #825 (Div. 2) A - C
    A模拟即可。voidsolve(){intn;cin>>n;vector<int>a(n),b(n);intcnt1=0,cnt2=0;for(inti=0;i<n;i++){cin>>a[i];......
  • Codeforces思维训练
    Codeforces思维训练1721CC.Min-MaxArrayTransformation给你一个非减序列\(a1,a2.a3...a_n\)和一个非减序列\(b1,b2,b3...b_n\)其中\(b_i=a_i+d_i\),对于每个\(......
  • Codeforces Round #170 (Div. 1) A. Learning Languages(连通块+dfs)
    https://codeforces.com/contest/277/problem/A题目大意:有n个人,有m种语言;这n个人分别会一些(也有可能会0种);问我们他们能否直接或者间接的交流?如果不能的话,一个人去......
  • Educational Codeforces Round 136 (Rated for Div. 2) D - Reset K Edges
    题目来源:EducationalCodeforcesRound136(RatedforDiv.2)D题目链接:Problem-D-Codeforces 题意给定一棵以1为根、大小为n的树,每次操作可以将一棵子树接到根......
  • Codeforces Round #694 (Div. 1) - B. Strange Definition
    数论Problem-B-Codeforces题意给定\(n\;(1<=n<=3*10^5)\)个数\(a[i]\),\(1<=a[i]<=10^6\)把\(a[i]\)看做是n个点的点权如果\(\frac{lcm(a[i],a[j])}{gc......
  • Codeforces:B. New Year and Ascent Sequence[模拟]
    题面Asequencea=[a1,a2,…,al]oflengthlhasanascentifthereexistsapairofindices(i,j)suchthat1≤i<j≤landai<aj.Forexample,thesequence[0,2......
  • Codeforces Round #800 div1 B
    B.FakePlasticTrees看了第三个样例发现一个节点可以由他的几个子节点一起构成我们首先自下而上的看肯定叶子节点越大越好这样我们选择的空间就会越多再者要是我们......
  • 「题解」Codeforces 1572B Xor of 3
    我知道你很急,但你先别急。我急了我急了我急了。如果直接上去莽构造的话,很可能就是像我一样大分讨的后果。先特判掉全是1,或者1的个数是奇数的情况。我的做法是考虑所......
  • Codeforces Round #822 (Div. 2)
    A题意给一个长为n的数组,每次可以对其中某个数做+1或-1的操作。求最小的操作次数,使得可以从数组中选出三个相同的数。思路很容易可以想到选三个最接近的数然后操作。也......
  • Codeforces.1305B Kuroni and Simple Strings[模拟]
    题面NowthatKuronihasreached10yearsold,heisabigboyanddoesn'tlikearraysofintegersaspresentsanymore.ThisyearhewantsaBracketsequencea......