最后一个点死活过不去啊
查看原帖
最后一个点死活过不去啊
448965
杨丶老爹楼主2021/10/6 20:50

不知道哪里出问题了,有没有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;
}
2021/10/6 20:50
加载中...