求助(CF1272E)
  • 板块学术版
  • 楼主rashoumon
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/7/2 20:20
  • 上次更新2023/11/6 23:45:38
查看原帖
求助(CF1272E)
312067
rashoumon楼主2020/7/2 20:20
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#define ll long long
#define INF 0x7f7f7f7f
using namespace std;
ll n,num[200005],step[200005],vis[200005];
void bfs(ll x)
{
	bool flag=true;
	ll cnt[200005]={0};
	queue <ll> q;
	q.push(x);
	cnt[x]=0;
	while(!q.empty()){
		int pos=q.front(),x1=pos-num[pos],x2=pos+num[pos];
		q.pop();
		vis[pos]=1;
		if(x1>=0){
			if(!vis[x1]){
				q.push(x1);
				cnt[x1]=cnt[pos]+1;
				if((num[x]+num[x1])%2){
					step[x]=min(cnt[x1],step[x]);
					flag=false;
				}
			}
		}
		if(x2<n){
			if(!vis[x2]){
				q.push(x2);
				cnt[x2]=cnt[pos]+1;
				if((num[x]+num[x2])%2){
					step[x]=min(cnt[x2],step[x]);
					flag=false;
				}
			}
		}
	}
	if(flag){
		step[x]=-1;
	}	
}
int main()
{
	ios::sync_with_stdio(0);
	memset(step,INF,sizeof(step));
	cin>>n;
	for(ll i=0;i<n;i++){
		cin>>num[i];
	}
	for(ll i=0;i<n;i++){
		bfs(i);
		memset(vis,0,sizeof(vis));
	}
	for(ll i=0;i<n;i++){
		printf("%lld%s",step[i],i==n-1?"\n":" ");
	}
	return 0;
}

原题

2020/7/2 20:20
加载中...