题目描述 nnn 个格子排成一列,一开始,你在第一个格子,目标为跳到第 n 个格子.在每个格子 i 里面你可以做出两个选择: 选择「a」:向前跳 ai 步. 选择「b」:向前跳 bi 步. 把每步的选择写成一个关于字符 a 和 b的字符串.求到达格子 n 的方案中,字典序最小的字符串.当做出某个选择时,你跳出了这n个格子的范围,则这个选择是不合法的. 当没有合法的选择序列时,输出 No solution!. 当字典序最小的字符串无限长时,输出 Infinity!. 否则,输出这个选择字符串.
题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时我们需要记录一下每个人是否在里面 #include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; wh