比赛 |
20241025 |
评测结果 |
AAAAAAAAAA |
题目名称 |
品质控制 |
最终得分 |
100 |
用户昵称 |
小金 |
运行时间 |
1.026 s |
代码语言 |
C++ |
内存使用 |
6.64 MiB |
提交时间 |
2024-10-25 11:12:00 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,ans,k;
long long ma,a[500010],b[500010],t[500010];
bool check(int l,int mid,int r)
{
for(int i=mid;i<r;i++) b[i]=a[i];
sort(b+mid,b+r);
int i=l,j=mid,k=0;
while(i<mid&&j<r)
{
if(b[i]<b[j]) t[k++]=b[i++];
else t[k++]=b[j++];
}
while(i<mid) t[k++]=b[i++];
while(j<r) t[k++]=b[j++];
long long sum=0;
for(int i=0;i<m&&i<k;i++,k--)
{
sum+=(t[i]-t[k-1])*(t[i]-t[k-1]);
}
return sum<=ma;
}
void solve()
{
scanf("%d%d%lld",&n,&m,&ma);
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
int l=0;
ans=0;
while(l<n)
{
int p=1,r=l;
while(p)
{
if(r+p<=n&&check(l,r,r+p))
{
r+=p;
p*=2;
for(int i=l;i<r;i++)
{
b[i]=t[i-l];
}
}
else p/=2;
}
ans++;
l=r;
}
printf("%d\n",ans);
}
int main()
{
freopen("cont.in","r",stdin);
freopen("cont.out","w",stdout);
scanf("%d",&k);
while(k--)
{
solve();
}
return 0;
}