开始的时候我递交了3次都错误。
让后我又读了一遍题,发现题意思是开始的时候速度为1,而不是我的程序中写的0
让后就过了
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define MAX 1010
int N,L;
int map[MAX];
int first[MAX];
int second[MAX];
int third[MAX];
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&L,&N)!=EOF)
{
int i=0;
for(i=0;i<MAX;i++)
map[i]=-1;
memset(first,0,sizeof(first));
memset(second,0,sizeof(second));
for(i=0;i<N;i++)
{
int x,y;
scanf("%d %d",&x,&y);
map[x]=y;
}
map[0]=1;
//第一次,从头到位
int k=1;
for(i=0;i<=L;i++)
{
//如果当前位置有mark
if(map[i]!=-1)
{
//如果当前速度<限制速度
if(k<map[i])
{
first[i]=k++;
}
else
{
first[i]=map[i];
k=map[i];
k++;
}
}
//如果当前没有限制节点
else
{
first[i]=k++;
}
}
//第二次从尾到头
k=2000;
for(i=L;i>=0;i--)
{
//如果当前位置有mark
if(map[i]!=-1)
{
//如果当前速度>限制速度
if(k<map[i])
{
second[i]=k++;
}
else
{
second[i]=map[i];
k=map[i];
k++;
}
}
//如果当前节点没有mark
else
{
second[i]=k++;
}
}
//更新
for(i=0;i<=L;i++)
{
third[i]=min(first[i],second[i]);
}
int max=0;
for(i=0;i<=L;i++)
{
if(max<third[i])
{
max=third[i];
}
}
printf("%d\n",max);
}
return 0;
}