ICPC网络赛第二场G Limit
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICPC网络赛第二场G Limit相关的知识,希望对你有一定的参考价值。
题意:
给你数组a和b,求解:
1
≤
n
≤
100000
,
−
100
≤
a
i
,
b
i
≤
100
,
0
≤
t
≤
5.
1≤n≤100000,−100≤a_{i},b_{i}≤100,0≤t≤5.
1≤n≤100000,−100≤ai,bi≤100,0≤t≤5.
题解:
要用到洛必达来做,首先明确一下,洛必达要求分母分子都趋于0
什么情况是无穷?分母无限趋于0,分子为常数时,此时就是无穷情况
那我们可以这样做,直接将式子洛必达t次,每次洛必达结束后判断,如果分母无限趋于0(即还存在x),分母为常数(说明分母洛必达后的系数不为0),此时答案就是
∞
∞
∞
否则,答案就是常数
分母洛必达好求
分子洛必达为:
对于每次洛必达,我们就求对应的数是否为0(比如第一次洛必达后,就是求
∑
a
i
b
i
\\sum{a_{i}b_{i}}
∑aibi)
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define x first
#define y second
typedef pair<int,int> pii;
const int N = 400010;
const int mod=998244353;
int a[N];
int b[N];
int main()
{
int n;
cin>>n;
int t;
cin>>t;
for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
if(t==0){
cout<<0<<endl;
}
else
{
int now=0;
int d=1;
for(int i=1;i<=t;i++){
now=0;
d*=i;
if(i==1){
for(int j=1;j<=n;j++)
now=now+a[j]*b[j];
}
else if(i==2){
for(int j=1;j<=n;j++)
now=now+a[j]*b[j]*b[j]*(-1);
}
else if(i==3){
for(int j=1;j<=n;j++)
now=now+a[j]*b[j]*b[j]*2*b[j];
}
else if(i==4){
for(int j=1;j<=n;j++)
now=now+a[j]*b[j]*b[j]*(-6)*b[j]*b[j];
}
else
{
for(int j=1;j<=n;j++)
now=now+a[j]*b[j]*b[j]*24*b[j]*b[j]*b[j];
}
// cout<<"now="<<now<<endl;
if(now!=0 && i!=t){
cout<<"infinity"<<endl;
return 0;
}
}
int g=__gcd(now,d);
now/=g;
d/=g;
if(d==1) cout<<now<<endl;
else cout<<now<<"/"<<d<<endl;
}
return 0;
}
以上是关于ICPC网络赛第二场G Limit的主要内容,如果未能解决你的问题,请参考以下文章
2021-icpc网络赛第二场-M.J.G.L(后续补题中)
ICPC网络赛第二场 L.Euler Function 欧拉函数性质+势能线段树
ICPC网络赛第二场 L.Euler Function 欧拉函数性质+势能线段树
2021ICPC网络赛第二场The 2021 ICPC Asia Regionals Online Contest (II) L Euler Function