做网站的论坛,做网站需要注册公司吗,手机购物网站 建站,wordpress 评论时间Robot 题目描述 有N个任务需要Robot去完成#xff0c;这个N个任务的地点在一个数轴上#xff0c;坐标为1到n。每个任务需要先完成ai个任务才能开始去做。Robot可以在直线上左右移动#xff0c;初始位置位于任务1的地点#xff0c;方向朝向数轴正方向。请问Robot最少转换多少… Robot 题目描述 有N个任务需要Robot去完成这个N个任务的地点在一个数轴上坐标为1到n。每个任务需要先完成ai个任务才能开始去做。Robot可以在直线上左右移动初始位置位于任务1的地点方向朝向数轴正方向。请问Robot最少转换多少次方向可以完成所有的任务。 输入 存在多个样例。 每个样例的第一行是一个整数n(1≤n≤1000), 第二行是一个n个整数a1,a2,⋯,an(0≤ain)。 输入数据保证一定能完成任务。 输出 每行输出一个样例的结果 样例输入 3
0 2 0
7
0 3 1 0 5 2 6样例输出 1
2 解题思路这题要简单就非常的简单如果要优化代码的话就要用到一些算法。这里我们就无脑一下直接秒杀掉。
我们就一路横冲直撞一直到最后一个任务正方向或 第一个任务反方向然后掉头。遇到一个就判断一个这个任务做了没这个任务能不能做如果都符合条件就完成该任务直至完成所有任务。
AC代码
#include stdio.hint n,ans,finishNum;
int task[1010];int main()
{while (scanf(%d,n) ! EOF){int books[1010] {0}; // 标记数组ans 0, finishNum 0;for (int i 1; i n; i )scanf(%d,task[i]);while ( 1 ){ // 从左向右一直到最后一个任务for (int i 1; i n; i ){if (task[i] finishNum books[i] 0) // 如果能完成该任务{finishNum ;books[i] 1;}}if (finishNum n) break; // 如果任务还没有全完成ans ; // 掉头// 从右向左一直到第一个任务 for (int i n; i 1; i --){if (task[i] finishNum books[i] 0){finishNum ;books[i] 1;} }if (finishNum n) break; // 如果任务还没有全完成ans ; // 掉头}printf(%d\n,ans);}return 0;
}