開始的時候我遞交了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;
}