欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XTU online judge 1253 Robot

程序员文章站 2022-06-01 22:37:17
...

Description
有N 个任务需要Robot去完成,这个N个任务的地点在一个数轴上,坐标为1 到n 。每个任务需要先完成a i 个任务才能开始去做。Robot可以在直线上左右移动,初始位置位于任务1 的地点,方向朝向数轴正方向。请问Robot最少转换多少次方向可以完成所有的任务。

Input
存在多个样例。
每个样例的第一行是一个整数n(1≤n≤1000) ,
第二行是一个n 个整数a 1 ,a 2 ,⋯,a n (0≤a i <n) 。
输入数据保证一定能完成任务。

Output
每行输出一个样例的结果

SampleInput
3
0 2 0
7
0 3 1 0 5 2 6

Sample Output
1
2

解题代码:

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,a[1010],b,result;
    bool flag[1010];
    while(scanf("%d",&n)!=EOF)
	{
        for(int i=0;i<n;i++) 
			scanf("%d",&a[i]);
        memset(flag,0,sizeof(flag));
        b = 0;
        result  = 0;
        while(b != n)
		{
            for(int i=0;i<n;i++)
			{
                if(b >= a[i] && !flag[i])
				{
                    b++;
                    flag[i] = true;
                }
            }
            if(b == n) break;
            else result++;
            for(int i=n-1;i>=0;i--)
			{
                if(b >= a[i] && !flag[i])
				{
                    b++;
                    flag[i] = true;
                }
            }
            if(b == n) break;
            else result++;
        }
        printf("%d\n",result);
    }
    return 0;
}