96分求助
查看原帖
96分求助
136889
wweiyi楼主2021/10/6 22:33

不知道有没有做过这道题的朋友

这道题目我快调了两个多小时了

但是一直调不出来,怎么办,当我加上一个判断

if(m==0)
{
	cout<<"NO"<<'\n';
    return 0;
}

这样,我就会从96分变成84分,请问有没有人能帮帮我,谢谢

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
const int maxn=100005;
int n,m,s;
int w[maxn];
int cnt=0;
bool vis[maxn];
bool flag=false;
bool check()
{
	for(int i=0;i<=m+1;i++)
	if(!vis[i])
	return false;
	return true;
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0); 
	cin>>n>>m>>s;
	srand(time(0)); 
	if(m==0)
	{
		cout<<"YES"<<'\n'<<1<<" "<<0<<'\n';
		return 0;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>w[i];
		if(w[i]-w[i-1]<s)
		cnt++;
		else
		cnt=0;
		if(cnt>=3) flag=true;
	}
	w[0]=0;w[m+1]=n;
	if(m==2)
	{
		if(w[m]-w[m-1]<s)
		{
			cout<<"NO"<<'\n';
			return 0;
		}
	}
	if(flag||m==0)
	{
		cout<<"NO"<<'\n';
		return 0;
	}
	cout<<"YES"<<'\n'; 
	int last=0;
	int tot=1;
	while(!check())
	{
		for(int i=1;i<=m+1;i++)
		{
			if(w[i]-w[last]>=s&&!vis[i])
			{
				cout<<i<<" ";
				vis[i]=true;
				last=i;
			}
			else continue;
		}
		for(int i=last;i>=0;i--)
		{
			if(w[last]-w[i]>=s&&!vis[i])
			{
				cout<<i<<" ";
				vis[i]=true;
				last=i;
			}
		}
	}
	
	return 0;
}
2021/10/6 22:33
加载中...