链接:http://codeforces.com/problemset/problem/583/B
//求改变的方向次数
//直接模拟 题目是从1 开始 所以从左到右 从右到左
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[1000+10];
int vis[1000+10];
int main()
{
int n,t=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",a+i);
}
if(n==1){printf("0\n");return 0;}
int ans,flag,cnt=0;
ans=flag=0;
while(cnt!=n)
{
for(int i=0;i<n;i++)
{
if(a[i]<=cnt&&!vis[i])
{
cnt++;
if(!flag)
{
ans++;
flag=1;
}
vis[i]=1;
}
}
for(int i=n-1;i>=0;i--)
{
if(a[i]<=cnt&&!vis[i])
{
cnt++;
if(flag)
{
ans++;
flag=0;
}
vis[i]=1;
}
}
}
printf("%d",ans-1);
return 0;
}
本文提供了一种解决CodeForces 583B问题的方法,该问题要求计算序列中方向变化的次数。通过双向扫描数组并使用标记来跟踪已处理元素的方式,实现了高效的解决方案。
1008

被折叠的 条评论
为什么被折叠?



