Description
n台电脑,每台电脑有一条信息,一黑客每次黑掉一台电脑需要ai条信息,这个黑客会沿着电脑排成的序列来回走直至黑掉所有电脑,问这个黑客最少需要转弯几次
Input
第一行为一整数n表示电脑数量,第二行n个整数表示黑掉这n台电脑分别需要多少条信息
Output
输出这名黑客黑掉所有电脑最少需要转弯几次
Sample Input
7
0 3 1 0 5 2 6
Sample Output
2
Solution
每次贪心的选取最小的ai,具体操作就是对这个数组来回扫,令pre为当前黑客获得的信息,初始化pre=0,ans表示转弯次数,ans为奇则从后往前扫,ans为偶则从前往后扫,每次只要扫到ai<=pre就标记i表示黑掉第i台电脑,然后pre++表示获得一条信息,当pre=n时退出循环输出ans即可
Code
#include<stdio.h>
#include<string.h>
int n,a[1001],vis[1001];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int pre=0,ans=0;
memset(vis,0,sizeof(vis));
while(1)
{
if(ans%2==0)
{
for(int i=1;i<=n;i++)
if(!vis[i]&&a[i]<=pre)
{
vis[i]=1;
pre++;
}
}
else
{
for(int i=n;i>=1;i--)
if(!vis[i]&&a[i]<=pre)
{
vis[i]=1;
pre++;
}
}
if(pre==n)break;
ans++;
}
printf("%d\n",ans);
}
return 0;
}