题解 P7273 【ix35 的等差数列】
听说题解都被叉了,写一发能过 hack 数据的。
考虑枚举公差,设公差为
显然
那么,我们需要
因为是等差数列,所以第
所以对于第
然后这样被叉了会 WA。注意要判断
#include<iostream>
using namespace std;
int n,w,ans;
int a[300005],c[300005],t[300005];
int main()
{
cin>>n>>w;
if(n==1)
{
cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
cin>>a[i];
ans=n;
for(int k=0;1+(n-1)*k<=w;k++)
{
for(int i=1;i<=n;i++)
if(a[i]-k*(i-1)>0&&a[i]-k*(i-1)+(n-1)*k<=w) t[a[i]-k*(i-1)]++,ans=min(ans,n-t[a[i]-k*(i-1)]);
for(int i=1;i<=n;i++)
if(a[i]-k*(i-1)>0) t[a[i]-k*(i-1)]=0;
}
cout<<ans;
return 0;
}