题意

n 个小区排成一列,编号为从 0 到 n-1 。一开始,美团外卖员在第0号小区,目标为位于第 n-1 个小区的配送站。
给定两个整数数列 a[0]~a[n-1] 和 b[0]~b[n-1] ,在每个小区 i 里你有两种选择:
1) 选择a:向前 a[i] 个小区。
2) 选择b:向前 b[i] 个小区。
把每步的选择写成一个关于字符 ‘a’ 和 ‘b’ 的字符串。求到达小区n-1的方案中,字典序最小的字符串。如果做出某个选择时,你跳出了这n个小区的范围,则这个选择不合法。
• 当没有合法的选择序列时,输出 “No solution!”。
• 当字典序最小的字符串无限长时,输出 “Infinity!”。
• 否则,输出这个选择字符串。
字典序定义如下:串s和串t,如果串 s 字典序比串 t 小,则
• 存在整数 i ≥ -1,使得∀j,0 ≤ j ≤ i,满足s[j] = t[j] 且 s[i+1] < t[i+1]。
• 其中,空字符 < ‘a’ < ‘b’。

思路

先按反向边建图,dfs判断每个点与终点的连通性,然后对于从起点可以走到终点的情况,从起点贪心,如果此时按a走可以到与终点连通的点就按a走,否则就按b走,记录每一步的走法,如果步数超过n的话就一定是循环了,那就是“Infinity!”,否则就输出字符串即可

代码

#include <cstdio>
#include <vector>
using namespace std;
vector<int> edge[100001];
int a[100001],b[100001];
bool vis[100001];
char ans[100001];
bool f;
int n;
void dfs(int x)
{if(vis[x])return;vis[x]=true;for(int i=0;i<edge[x].size();i++)dfs(edge[x][i]);return;
}
void dfs2(int x,int step)
{if(x<0||x>=n||!vis[x])return;if(step>=n)return;if(x==n-1){f=true;return;}if(x+a[x]>=0&&x+a[x]<n&&vis[x+a[x]]){ans[step]='a';dfs2(x+a[x],step+1);}else{ans[step]='b';dfs2(x+b[x],step+1);}return;
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);for(int i=0;i<n;i++)scanf("%d",&b[i]);for(int i=0;i<n;i++)if(i+a[i]>=0&&i+a[i]<n)edge[i+a[i]].push_back(i);for(int i=0;i<n;i++)if(i+b[i]>=0&&i+b[i]<n)edge[i+b[i]].push_back(i);dfs(n-1);if(!vis[0])printf("No solution!\n");else{dfs2(0,0);if(f)printf("%s\n",ans);else printf("Infinity!\n");}return 0;
}

CodeM资格赛D 送外卖 题解相关推荐

  1. CodeM资格赛A 音乐研究 题解

    题意 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长 ...

  2. 美团2017年CodeM资格赛题解

    最近想要参加今年的CodeM竞赛,所以把去年的题做了一遍,顺便写个题解,做个记录. 资格赛有A-F,共6道题,资格赛不限时,而且只要完成一道题就可以了. A.数码 题意:给定两个整数 l 和 r ,对 ...

  3. LibreOJ #6177. 「美团 CodeM 初赛 Round B」送外卖2【状压DP】

    「美团 CodeM 初赛 Round B」送外卖2 内存限制:32 MiB 时间限制:200 ms 题目描述 一 张 n 个 点 m 条 有 向 边 的 图 上 , 有 q 个 配 送 需 求 , 需 ...

  4. 知乎热议:浙大读博八年现靠送外卖赚钱

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  5. 浙大读博八年现靠送外卖赚钱,本人:进组以来博士无一人按时毕业

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 杨净 发自 凹非寺 量子位 | 公众号 QbitAI 浙大在读博士, ...

  6. 95后程序员月薪2万背着电脑送外卖,送单途中改Bug

    公众号关注 "视学算法" 设为 "星标",消息即可送达! 来源:云技术(ID:aiyunjishu) [#95后程序员背着电脑送外卖# 随时应对甲方临时需求] ...

  7. 送外卖最强的男人!!

    前几天朋友圈看见一张截图,截图是一个外卖小哥的求职简历,简历的工作描述十分引人注目. 很多人在朋友圈评论很好笑,而我却陷入了沉思. 在我心中,最强的男人要不是这样的 要不是这样的 而萌萌的外卖小哥怎么 ...

  8. 阿里程序员回老家被哥们问工作,回答在阿里,哥们却吐槽:破IT就破IT,还阿里巴巴!网友:京东就是送快递的,美团就是送外卖的!...

    请点击上面 一键关注! 大学生回老家最怕被问专业,如果你说学计算机,亲戚就会让你修电脑:如果你说学酒店管理,亲戚会以为你是服务员:如果你说学建筑,亲戚会说原来你是工地搬砖的-- 大学毕业参加工作后再回 ...

  9. 无人机送外卖已落地深圳,这体验有多爽?你根本想不到!

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 「天上掉馅饼」时代,已经来临! 作为领域里最饱受期待的场景之一 -- 无人机送外卖,已经率先在深圳启动. 美团,首次官宣即落地.截止6月,面 ...

最新文章

  1. hmm 求隐藏序列_统计学习方法--HMM回顾
  2. 如何在Debian 8/7上安装PostgreSQL 9.6
  3. shell中变量的替换
  4. DotNetTextBox V2.0 Web Control(ASP.NET2.0 增强型TextBox控件,完全支持AJAX.NET)
  5. 查找数组是否有重复元素
  6. 前端技术及开发模式的演进,带你了解前端技术的前世今生
  7. Python监视电子邮箱并提示收到新邮件
  8. 深度学习自学(三十一):基于变分期望最大化深度学习的非盲噪声图像去模糊
  9. 换加密算法--python
  10. 【HDU4691】Front compression(求给定两个子串/后缀的最长公共前缀---后缀数组+st表+一点思维)
  11. SoapUI WebService 接口测试
  12. 酷应用背后,低代码正在被重估
  13. C++——以任意数为底的对数
  14. mpc高清设置超详细
  15. 线程安全的对象生命期管理(一)
  16. stc15系列c语言pwm编程,分享一下stc15单片机的PWM波程序
  17. 2020 年值得关注的20个区块链项目,来看看今年该把目光放在哪?
  18. java测试开发工程师,必须要明白的几处知识(附面试问题)
  19. 企业网络和家庭网络区别
  20. 致敬中国杰出量化女性

热门文章

  1. 从数据指标到可视化看板-指标体系建设
  2. 苹果Mac特殊符号快捷键输入方法有哪些?
  3. 实验吧——天下武功唯快不破
  4. C#: 解决Fody is only supported on MSBuild 16 and above
  5. java实现第四届蓝桥杯好好学习
  6. 词根词缀学单词【3】
  7. Go语言爱好者周刊:第 142 期
  8. el-checkbox的坑(点击全选状态改变了但是不生效)
  9. 美团点评校招前端方向笔试题
  10. 【毕业设计】室内定位系统(wifi指纹定位)