作物解锁条件¶
- 参考时间限制:0.5 秒(参考环境:R30;仅供预估)
- 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间乘以 2,再按 0.5 秒向上取整。
- 内存限制:128 MB
背景故事¶
一款农业游戏扩展提供基础作物与衍生作物。衍生作物的配方可能依赖其他配方,甚至形成环。你要找出从现有基础作物出发,最终真正能够获得哪些作物。
形式化问题描述¶
共有 \(N+M\) 种作物,编号 \(1,\ldots,N+M\) .最初仅前 \(N\) 种已获得。后 \(M\) 种各有一个条件表达式,包含作物编号、逻辑与 && 、逻辑或 || 和圆括号。
编号的值表示对应作物是否已经获得。逻辑与的优先级高于逻辑或,同级运算从左到右;括号优先。允许在记号之间出现空格或制表符;一个整数或一个双字符运算符内部没有空白,整数没有前导零。
重复应用以下规则:若某种未获得作物的条件为真,就获得它。已经获得的作物永远保留。直到再也没有新作物能够获得。只由未获得作物互相依赖形成的环不会自行解锁;条件中的重复编号按普通逻辑运算解释。请判断每种衍生作物最终能否获得。
输入格式¶
第一行两个整数 \(N,M\) .随后恰好 \(M\) 行,第 \(i\) 行是编号 \(N+i\) 的条件表达式。每个表达式至少包含一个编号,且语法合法。
输出格式¶
输出 \(M\) 行。第 \(i\) 行在作物 \(N+i\) 最终可获得时输出 1 ,否则输出 0 .若 \(M=0\) 则不输出任何行。
样例 1¶
输入¶
1 5
3 || 1
2 && 2
5
4
2 || 4 && 5
输出¶
1
1
0
0
1
解释¶
作物二由基础作物一解锁,随后解锁三和六;四和五互相等待。
箭头展示一条实际解锁过程及四、五之间未启动的环;结点下方数字表示最终可用状态。图中未画出全部条件引用。
样例 2¶
输入¶
0 2
2
1
输出¶
0
0
解释¶
没有基础作物,二者的依赖环不能自行解锁。
样例 3¶
输入¶
2 2
1||3&&2
3&&3
输出¶
1
1
解释¶
与优先于或,因此作物三的条件为 \(1\lor(3\land2)\) ,基础作物一足以解锁它,随后也能获得四。
数据范围与保证¶
\(N,M\ge0\) ,\(1\le N+M\le2\times10^5\) .所有表达式长度之和 \(S\le10^6\) ,长度包含空格和制表符,不包含行尾换行。表达式中的编号都在 \([1,N+M]\) 中。
数据规格由 Codex(GPT-6)补齐:确定逐行表达式格式、输入规模、最初仅基础作物可用的递推语义、空集合边界与测试分组。
数据分组¶
| 分值比例 | 额外条件 |
|---|---|
| 20% | \(N+M\le20,\ S\le1000\) |
| 30% | \(N+M\le1000,\ S\le10000\) |
| 50% | 无额外条件 |