题解 | #送外卖#

送外卖

https://ac.nowcoder.com/acm/problem/13224

思路:深度代表到达的小区编号,每一个小区都有走a,走b两种选择,走a一定先于走b,因为要确保输出的是最小字典序,在搜索的过程中,如果搜索到了一个曾经访问过的小区,那么一定就陷入了死循环,flag标记为1,为了模拟进入死循环的情况,如果在返回的过程中发现有一个小区曾经访问过,那么当前状态的字符串一定是无限长的。

#include<bits/stdc++.h>
using namespace std;
int n;
const int M=1e5+5;
int a[M];
int b[M];
int vis[M];
int f[M];
int flag;
char ans[M];
int dfs(int dep,int step){
	if(dep<1||dep>n){
		return 0;
	}
	if(dep==n){
		ans[step]='\0';
		return 1;
	}	
	if(vis[dep]){
		f[dep]=1;
		return 0;
	}
	vis[dep]=1;
	if(dfs(dep+a[dep],step+1)){
		ans[step]='a';
		if(f[dep])	flag=1;
		return true;
	}
	if(dfs(dep+b[dep],step+1)){
		ans[step]='b';
		if(f[dep])	flag=1;
		return true;
	}
	return false;
}

int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); 
	cin>>n;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=1;i<=n;i++)	cin>>b[i];
	if(dfs(1,0)){
		if(flag)	cout<<"Infinity!"<<endl;
		else	cout<<ans<<endl;
	}
	else	cout<<"No solution!"<<endl;
	
	return 0; 
}
竞赛奋斗日志 文章被收录于专栏

一个奋斗的蒟蒻

全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务