您好 关于我刚刚评论的您的贴子的那道D题 以下是我写好的代码 加上注释了
Test#2中 checker log wrong answer 201st numbers differ - expected: '3', found: '4'
您能帮我看看哪有错吗?
```c++
#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
#define INF 0x3f3f3f3f3f3f3f3f
#define MOD 998244353
#define PLL pair<ll,ll>
#define PII pair<int,int>
#define PI acos(-1.0)
#define lowbit(x) ((x)&(-x))
using namespace std;
const int N=2e5+10;
ll arr[N];
void solve(){
ll n,c;
cin>>n>>c;
ll sum[N]={0}; //前缀和
for(int i=1;i<=n;++i) {cin>>arr[i];sum[i]=sum[i-1]+arr[i];}
for(int i=1;i<=n;++i){
ll tem=arr[i];
bool flag=0;
if(arr[1]+c>=arr[i]){ //这时把前面的全清了
tem=c+sum[i]; //此时i的票数为前i个人的票数之和加上c
flag=1; //标记
}
bool ok=0;
for(int j=i+1;j<=n;++j){ //判断后面的
if(arr[j]>tem){ //tem有两种情况 分别是flag==1和flag==0 可以发现无论哪种情况
//只要后面有一个票数大于tem的 都是把i前面的全清及将后面票数最多的清掉 那么总共就是清掉i个人
cout<<i<<" ";
ok=1;
break;
}
}
if(ok) continue;
if(flag){ //如果后面没有票数更大的 那就是把前面的全清了
cout<<i-1<<" ";
}else{ //后面没有更大的了 看前面还有没有更大的
bool flag2=0;
for(int j=1;j<i;++j){
if(arr[j]>=arr[i]){ //如果有 就需要把前面的全清了 就是i-1个人
cout<<i-1<<" ";
flag2=1;
break;
}
}
if(!flag2) //如果前面后面都没有比i大的而且arr[1]+c也没那么大 就一个人也不用清
cout<<0<<" ";
}
}
cout<<endl;
}
int main(){
ios::sync_with_stdio(0),std::cin.tie(0),std::cout.tie(0);
ll t=1;
cin>>t;
while(t--) solve();
return 0;
}
```