使用尺取法,但是此题最重点的是求逆元的过程,,求逆元的四种实现方式在本人的收藏夹数论部分
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<cmath>
#include<string>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
ll mod=998244353;
ll n,k;
ll a[200010];
//费马小定理求逆元(快速幂)
ll qsum(ll a,ll b){
ll sum=1;
while(b){
if(b&1)sum=(sum*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return sum;
}
int main(){
scanf("%lld %lld",&n,&k);
for(int i=1;i<=n;i++){
scanf("%lld",a+i);
}
ll l=1,r=1;
ll maxn=0;
ll sum=1;
while(r<=n){
if(a[r]){//判断a[r]是否是0
sum=(sum*a[r])%mod;
if(r-l+1>k){
sum=sum*qsum(a[l],mod-2)%mod;//乘逆元
l++;
}
if(r-l+1==k&&sum>maxn)maxn=sum;
}
else {
l=r+1;
sum=1;
}
r++;
}
printf("%lld\n",maxn);
return 0;
}
// /\ | / |**、
// / \ | / | \
// / \ |/ | / _____ ____ | /
// /------\ |\ |__/ / \ \ /\ / / \ | /
// / \ | \ | / \ \ / \ / /______\ |/
// / \ | \ | \ / \ / \ / \ |
// / \ | \ | \_____/ \/ \/ \_____ |
/**
* ┏┓ ┏┓
* ┏┛┗━━━━━━━┛┗━━━┓
* ┃ ┃
* ┃ ━ ┃
* ┃ > < ┃
* ┃ ┃
* ┃... ⌒ ... ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃ Code is far away from bug with the animal protecting
* ┃ ┃ 神兽保佑,代码无bug
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
// warm heart, wagging tail,and a smile just for you!
//
// _ooOoo_
// o8888888o
// 88" . "88
// (| -_- |)
// O\ = /O
// ____/`---'\____
// .' \| |// `.
// / \||| : |||// \
// / _||||| -:- |||||- \
// | | \\ - /// | |
// | \_| ''\---/'' | |
// \ .-\__ `-` ___/-. /
// ___`. .' /--.--\ `. . __
// ."" '< `.___\_<|>_/___.' >'"".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// ======`-.____`-.___\_____/___.-`____.-'======
// `=---='
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//