1762: 虚境的花海(序章)
Description
原神千星奇域即将在2025年10月22日上午十点半上线!Oh yeah!
纳西妲准备送给旅行者一个惊喜…
纳西妲:旅行者,近来可好?想要学习新知识吗,我这里有一个好玩的东西。
派蒙(Emergency):[惊讶的表情]诶,什么好玩的?我要玩,我要玩!
纳西妲:「虚空终端工作坊」。旅行者在长草的时候可以学习并制作属于自己的小工具,甚至可以再现虚空终端哟。
派蒙:嘿嘿,边玩边学习一定很有成就感,我们开始吧。学习版派蒙,启动!
遗憾的是,目前这个工作坊尚未搭建完成,需要你帮助纳西妲完成一项任务。
题目描述:
我们小学二年级就学过,在半导体数字电子电路中有与门(and),或门(or),非门(not),与非门(and
not),或非门(or not),异或门(xor),同或门(xnor)这些基础的门电路模块。我们可以用这些基础的门电路模块组合成高级的具有复杂功能的模块,比如说我们正在使用的计算机(其实没那么简单,但是抛开物理差不多就是这样)。
在虚空终端工作坊中的半导体数字电子电路关卡集合中,我们的目的就是通过几种基础的门电路,组合出高级的功能。
模块分为基础模块和非基础模块,现在有一个非基础模块代码(可以通过一定的逻辑转化为基础模块的组合),以及该非基础模块包含的所有非基础子模块的代码(非基础模块可以嵌套,但不能循环嵌套。任意非基础模块可以引用任意基础模块,基础模块内置,不提供代码。)
以及其多个输入波形图。
要求根据这个模块代码,依次求出以下内容:
①
这个代码是否能够产生一个连通电路图,且每个端口都有至少一个输入端口,如果不能产生,输出”No”然后换行
②
如果能产生,则这个电路图是否合法,不合法输出“No”然后换行
③
如果合法,输出其波形图
合法判定:
一个非基础模块合法当且仅当该非基础模块的电路图(有向,由输出指向输入)不包含环
基础模块:
与门<and>,二输入(a,b)一输出(c),逻辑关系为c=ab
或门<or>,二输入(a,b)一输出(c),逻辑关系为c=a+b
非门<not>,一输入(a)一输出(b),逻辑关系为b=a’
与非门<nand>,二输入(a,b)一输出(c),逻辑关系为c=(ab)’
或非门<nor>,二输入(a,b)一输出(c),逻辑关系为c=(a+b)’
同或门<xnor>,二输入(a,b)一输出(c),逻辑关系为c=a⊙b
异或门<xor>,二输入(a,b)一输出(c),逻辑关系为c=a⊕b
SR锁存器,二输入(s,r),二输出(qa,qb),sr=0时合法,s=1时qa=1,qb=0,r=1时qa=0,qb=1
代码结构:
.module文件(即给定模块文件):
import <module file name1>
import <module file name2>(尖括号保留,里面部分换成模块相对路径,库模块只需加库模块的名字)
export module <module name>:(尖括号保留,里面部分换成要导出的模块名)
input{module_input_1;module_input_2},(输入的端口名,用分号隔开)
output{module_output_1;module_output_2},(输出的端口名,用分号隔开)
except{},(设置低电平有效的端口名,用分号隔开)
describe{“this is a module\nhello world”},(对于模块描述,仅限ASCII可见字符和”\n”,用来代表换行符,用引号包裹)
struct{
<module name>:input(a:module_input_1,b:module_input_2),output(c:bb);(a:b代表模块中端口与指定端口短接)
<module name>:input(a:module_input_1,b:module_input_2),output(c:bb)
(用分号隔开,末尾不加分号)
};
.libmodule文件
import<module file name>
import<module file name>
export module<module name>{
//input
{数据个数} a b c d(代指a;b;c;d)
//output 同上
//except 同上
//describe 后面跟用引号引起来的TEXT
//struct
{数据个数} a b c d(代指input(a:b,c:d))
{数据个数} a b c d(代指output(a:b,c:d))
};
输入内容分为
模块数量(不包含待测模块)
之后每个模块,第一行是用引号引起来的文件路径
库文件路径是”root/__sys__/lib/”
第二行是用引号引起来的模块代码的字节码
然后按照上面所规定的输入待测模块代码
最后输入n和n行波形图,开头用"input_port:"来指定波形图对应的端口,接着用一个数指定输入持续时间,波形图包含数据个数m和m个时间,表示电平翻转,默认初始电平为低电平
Sample Input Copy
0
"a.module"
"696d706f7274203c616e643e0d0a696d706f7274203c786f723e0d0a6578706f7274206d6f64756c653c68616c665f6164643e3a0d0a696e7075747b6164645f696e7075745f313b6164645f696e7075745f327d2c0d0a6f75747075747b6164645f6f75747075745f733b6164645f6f75747075745f637d2c0d0a64657363726962657b2268616c662061646420746f6f6c227d2c0d0a7374727563747b0d0a3c616e643e3a696e70757428613a6164645f696e7075745f312c623a6164645f696e7075745f32292c6f7574707574286164645f6f75747075745f633a63293b0d0a3c786f723e3a696e70757428613a6164645f696e7075745f312c623a6164645f696e7075745f32292c6f757470757428633a6164645f6f75747075745f73290d0a7d3b0d0a"
add_input_1:5 3 1 2 3
add_input_2:5 2 1 3
Sample Output Copy
0 0 1 1