題面
這題目要到pta寫,還要購買真有點毒瘤
題目思路
這個題目最好的寫法是泰勒展開然而我只會洛必達...
回以一下部分的高數知識
對於有商的求導公式 [f(x)/g(x)]'=[f'(x)g(x)-f(x)g'(x)]/[g(x)]^2。
泰勒展開即為
而現在是要知道\(ln(1+x)\)的泰勒為
\(ln(1+x)=x-x^2/2+x^3/3-x^4/4+.......+(-1)^(n-1)x^n/n+O(x^{(n+1)})\)
然后再套一下就可以得到答案
代碼
#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=2e5+5,inf=0x3f3f3f3f,mod=29;
const double eps=1e-6;
const ll INF=0x3f3f3f3f3f3f3f3f;
int n,t;
ll a[maxn],b[maxn];
ll c[10],fac[10];
signed main(){
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&a[i],&b[i]);
for(int j=1;j<=t;j++){
if(j%2==1){
c[j]+=a[i]*qpow(b[i],j);
}else{
c[j]-=a[i]*qpow(b[i],j);
}
}
}
if(t==0){
printf("0");
return 0;
}
for(int j=1;j<=t;j++){
if(j==t){
if(c[j]==0){
printf("0");
}else{
ll g=__gcd(c[j],1ll*j);
ll zi=c[j]/g;
ll mu=j/g;
if(mu<0){
zi*=-1;
mu*=-1;
}
if(mu==1){
printf("%lld",zi);
break;
}
printf("%lld/%lld",zi,mu);
}
break;
}
if(c[j]!=0){
printf("infinity");
break;
}
}
return 0;
}