不知道哪里出问题了,有没有dalao帮忙看一看啊。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+4;
int n,m,s,pos[N],vis1[N],vis2[N],ans[N],cnt,temp;
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=m;i++) scanf("%d",&pos[i]); pos[m+1]=n;
for(int i=1;i<=m;i++) //正枚举
{
if(pos[i]-pos[temp]>=s)
{
ans[++cnt]=i;
temp=i;
vis1[i]=1;
}
}
if(pos[m+1]-pos[m]>=s) ans[++cnt]=m+1;
else
{
printf("NO");
return 0;
}
for(int i=m;i>=1;i--) //倒枚举
{
if(vis1[i]) continue;
if(pos[temp]-pos[i]>=s)
{
temp=i;
vis2[i]=1;
ans[++cnt]=i;
}
}
if(pos[temp]-pos[0]>=s) ans[++cnt]=0;
else
{
printf("NO");
return 0;
}
for(int i=1;i<=m;i++) //如果有点没有跳到过
{
if(!vis1[i] && !vis2[i])
{
printf("NO");
return 0;
}
}
printf("YES\n");
for(int i=1;i<=cnt;i++)
{
printf("%d ",ans[i]);
}
return 0;
}