为什么第二个测试点过不去
#include <bits/stdc++.h>using namespace std;
const long long N=2e5;
int a;
void solve()
{
long longn,k;
cin>>n>>k;
// vector<long long>a(n);
vector<long long>b;
for(int i=0;i<n;i++)
{
cin>>a;
}
if(n==1)cout<<0<<endl;
else if(n==2)
{
if(abs(a-a)>k)cout<<0<<endl;
else cout<<1<<endl;
}
else{
sort(a,a+n);
long longres=0;
long longans=1;
for(int i=0;i<n-1;i++)
{
if(a-a<=k)
{
ans++;
}
else
{
b.push_back(ans);
ans=1;
}
b.push_back(ans);
}
for(auto i:b)
{
res=max(res,i);
}
cout<<n-res<<endl;
}
}
int main()
{
long long t;
cin>>t;
while (t--)
{
solve();
}
}
题目 :D - Balanced Round 你的代码在第二个测试点无法通过的原因是因为在计算结果时存在逻辑错误。在for循环中,当a-a[ i]<=k时,你增加了ans的值,但是在else语句中,你将ans的值重新设为1,这样会导致在计算结果时漏掉了一些符合条件的情况。你需要重新调整计算结果的逻辑,确保所有符合条件的情况都被正确计算。
页:
[1]