题目描述:原题链接
解法:
思路:
把每种情况都枚举一遍取最大值。要注意的是,要边乘边模,而且为了避免出现不整除出现小数,所以要用到乘法逆元。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+10,mod=998244353;
ll n,k,a[N];
ll qpow(ll a,ll b)
{
ll s=1;
while(b)
{
if(b&1)s=s*a%mod;
b>>=1;
a=a*a%mod;
}
return s;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
ll s=1,cnt=0,mx=0;
for(ll i=1;i<=n;i++)
{
cin>>a[i];
if(i>k&&a[i-k]!=0)s=s*qpow(a[i-k],mod-2)%mod;
if(a[i]==0)cnt=0;
else cnt++,s=s*a[i]%mod;
if(cnt>=k)mx=max(mx,s);
}
printf("%lld\n",mx);
return 0;
}