骗分WA求助
查看原帖
骗分WA求助
1041071
ltz761222楼主2024/10/21 21:05

pts1,2,5,6该能过的,枚举答案并检查

//
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=1e5+10,M=1e6+10;
int a[N],ne[N],sum[N];
int q[N],en;
int n,k,maxn,ans;
bool check(int op)
{
	int w=1,dx=0;
	while (w)
	{
		while (a[w]%op!=0&&w)
			w=ne[w];
		if (!w)
			return false;
		w++,dx++;
		if (dx>=k&&sum[w-1]==a[w-1])
			return true;
	}
	return false;
}
int main ()
{
	scanf ("%d %d",&n,&k);
	for (int i=1;i<=n;i++)
		scanf ("%d",&a[i]),maxn=max(maxn,a[i]);
	for (int i=1;i<=n;i++)
	{
		while (a[q[en]]<a[i]&&en)
			ne[q[en]]=i,en--;
		q[++en]=i;
	}
	for (int i=n;i>=1;i--)
		sum[i]=max(a[i],sum[i+1]);
	
	if (k==1)
		ans=maxn;
	else
	{
		for (int i=maxn;i>=2;i--)
			if (check(i))
			{
				ans=i;
				break;
			}
		if (!ans)
			ans=1;
	}
	
	printf ("%d",ans);
	
	return 0;
}

提交记录

2024/10/21 21:05
加载中...