不知道有没有做过这道题的朋友
这道题目我快调了两个多小时了
但是一直调不出来,怎么办,当我加上一个判断
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;
}