CF197B Limit

题目撞名

题目大意:

给出两个函数 P ( x ) , Q ( x ) P(x),Q(x) P(x),Q(x).

P ( x ) = a 0 × x N + a 1 × x N − 1 + a 2 × x N − 2 ⋯ a N − 1 × x + a N P(x)=a_0 \times x^N+a_1 \times x^{N-1}+a_2 \times x^{N-2} \cdots a_{N-1} \times x+a_N P(x)=a0×xN+a1×xN1+a2×xN2aN1×x+aN

Q ( x ) = b 0 × x M + b 1 × x M − 1 + b 2 × x M − 2 ⋯ b M − 1 × x + b M Q(x)=b_0 \times x^M+b_1 \times x^{M-1}+b_2 \times x^{M-2} \cdots b_{M-1} \times x+b_M Q(x)=b0×xM+b1×xM1+b2×xM2bM1×x+bM

计算 lim ⁡ x → + ∞ P ( x ) Q ( x ) \lim_{x \to +\infty}\frac{P(x)}{Q(x)} limx+Q(x)P(x)

分析

先看一下极限的定义:设函数 f ( x ) f(x) f(x) 在点 x 0 x_0 x0 的某一去心邻域内有定义,如果存在常数 a a a, ∀ ε ∈ N \forall \varepsilon \in \mathbb{N} εN, ∃ δ > 0 \exists \delta>0 δ>0,使不等式 ∣ f ( x ) − a ∣ < ε |f(x)-a|<\varepsilon f(x)a<ε,在 ∣ x − x 0 ∣ ∈ ( 0 , δ ) |x-x_0|\in(0,\delta) xx0(0,δ) 时恒成立,那么常数 a a a 就叫做函数 f ( x ) f(x) f(x) x → x 0 x \to x_0 xx0 时的极限,记作 lim ⁡ x → x 0 f ( x ) = a \lim_{x \to x_0}f(x)=a limxx0f(x)=a.(根本就不是人话)

定义非常简(kan)单(bu)明(dong)了,于是肯定会有人会用一种非常简单粗暴的方法去解决这道题,将一个非常大的数带入,然后计算,答案取一个近似值,那么问题来了,需要带怎样的一个数进去呢,又如何计算呢.所以这个方法显然就是错误的,那么就要从这两个函数入手了,可以发现 lim ⁡ x → + ∞ P ( x ) a 0 × x N = 1 \lim_{x \to +\infty}\frac{P(x)}{a_0 \times x^N}=1 limx+a0×xNP(x)=1 具体证明见洛必达法则,所以当 x → + ∞ x \to +\infty x+ 时, P ( x ) = a 0 × x N P(x)=a_0 \times x^N P(x)=a0×xN, Q ( x ) = b 0 × x M Q(x)=b_0 \times x^M Q(x)=b0×xM,所以就直接取比较这两个值就好了.当 N > M N>M N>M时结果为 + ∞ +\infty + − ∞ -\infty ,结果与 a 0 a_0 a0 b 0 b_0 b0 的正负性有关,如果 a 0 ∗ b 0 > 0 a_0*b_0>0 a0b0>0 结果为 + ∞ +\infty +,反之为 − ∞ -\infty .如果 N < M N<M N<M 时结果为 0 0 0,当 N = M N=M N=M 时结果自然就是 a 0 b 0 \frac{a_0}{b_0} b0a0 了.

代码

#include<bits/stdc++.h>
#define REP(i,first,last) for(int i=first;i<=last;++i)
#define DOW(i,first,last) for(int i=first;i>=last;--i)
using namespace std;
int N,M;
int a0,b0;//只要记录a0和b0
int Gcd(int a,int b)//需要约分
{
	if(!b)
	{
		return a;
	}
	return Gcd(b,a%b);
}
int main()
{
	scanf("%d%d",&N,&M);
	int air;//没用的值
	scanf("%d",&a0);
	REP(i,1,N)
	{
		scanf("%d",&air);
	}
	scanf("%d",&b0);
	REP(i,1,M)
	{
		scanf("%d",&air);
	}
	if(N<M)//如果N<M时最后的答案为0
	{
		printf("0/1");
		return 0;
	}
	if(a0*b0<0)//如果a0*b0<时需要输出符号
	{
		printf("-");
		a0=abs(a0);
		b0=abs(b0);
	}
	if(N>M)//如果N>M时最终的结果为无穷大
	{
		printf("Infinity");
		return 0;
	}
	int gcd=Gcd(a0,b0);//约分
	a0/=gcd;
	b0/=gcd;
	printf("%d/%d",a0,b0);//输出答案
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值