「CF197B Limit」

题目撞名

题目大意:

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

\(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\)

\(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\)

计算 \(\lim_{x \to +\infty}\frac{P(x)}{Q(x)}\)

分析

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

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

代码

#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;
}

posted @ 2020-02-14 19:54  SxyLimit  阅读(220)  评论(0编辑  收藏  举报