最近⼩ Y 正在學習邏輯,⽽眾所皆知的,學習邏輯的第⼀步就是學會「布林變數」。
所謂的「布林變數」,就是⼀個只能是0和1的變數,⽽這些變數可以透過⼀些專⾨的「運算⼦」組成⼀個「布林運算式」。在本題中,我們只會介紹並使⽤到「not」、「and」、「or」三種運算⼦。
⼀個在本題中合法的「布林運算式」可由下列規則所決定,假設A、B是任意兩個合法的布林運算式:
在此,所有的「元素」都必須以單⼀空格隔開,元素包括布林變數、括號以及運算⼦,⼀個布林運算式的⻑度被定義為他的元素個數。
⽽對於⼀個合法的布林運算式,他的運算結果如下列規則所決定,假設A、B是任意兩個合法的布林運算式:
⼩ Y 在研究這類布林運算式時發現了下列的等式,假設A、B是任意兩個合法的布林運算式,則:
( A ) and ( B ) = not ( ( not ( A ) ) or ( not ( B ) ) ) 這實際上是「笛摩根定理(De Morgan’s laws)」的其中⼀個結論,看到這裡,⼩ Y 便很好奇,是否有辦法把任意符合本題規則的合法布林運算式,轉換成⼀個仍舊合法,但不包含任何and運算⼦的布林運算式呢?實際上,我們可以證明這總是辦得到的。
注意到,兩個 N 個布林變數的布林運算式若等價,代表對於 2N 種可能的變數賦值,兩個運算式的運算結果皆相同。
現在⼩ Y 給你了⼀個合法的布林運算式,請你給他⼀個合法的且等價輸⼊運算式的布林運算式,使得該運算式不包含任何and運算⼦。
輸⼊⾸⾏有兩個正整數 N,M,代表布林變數的種類數和輸⼊運算式的⻑度。接下來⼀⾏,有⼀個符合規則且⻑度為 M 的布林運算式,規則如題敘所述。
⾸⾏輸出⼀個介於1 ∼ 7000之間的數字,代表你轉換過後的布林運算式⻑度。
接下來⼀⾏,輸出⼀個符合規則並等價輸⼊運算式、且不包含任何and操作的布林運算式。若你輸出的答案符合上述所有規定,則任何⼀種答案皆會被視為Accepted,否則會被視為Wrong Answer。
2 7 ( 1 ) and ( 2 )
16 not ( ( not ( 1 ) ) or ( not ( 2 ) ) )
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」 |