A1878. Lost Logic
编程题
省选/NOI-
知识点
题目描述
给定 $3$ 组随机布尔变量 $v_{i,1},...,v_{i,n}(1\leq i\leq 3)$,每组均为 $n$ 个。你需要构造关于布尔变量 $x_1,...,x_n$ 的若干组**条件**,使得满足全部条件的布尔变量赋值**有且仅有** $(v_{i,1},...,v_{i,n})(1\leq i\leq 3)$ 这 $3$ 组。
由于机器限制,你所构造每组条件的形式均应为:$A\rightarrow B$。这组条件的限制了:当 $A$ 为 $1$ 时 $B$ 一定为 $1$。其中,$A,B$ 可能形如:
- $x_i$:表示第 $i$ 个变量的值。
- $!x_i$:表示第 $i$ 个变量取反后的值。
例如,如果你构造了 $x_1\rightarrow x_2$,那么表示你规定 $x_1=1$ 时必有 $x_2=1$;如果你构造了 $!x_1\rightarrow x_2$,那么你规定了 $x_1=0$ 时必有 $x_2=1$。你需要找到一种使用不超过 $500$ 组条件来满足题意的方法,或者判定这样的条件组合不可能存在。如果有多组解,输出任意一组均可。
数据保证 $2\leq n\leq 50,v_{i,j}\in\{0,1\}(1\leq i\leq 3,1\leq j\leq n)$。
由于机器限制,你所构造每组条件的形式均应为:$A\rightarrow B$。这组条件的限制了:当 $A$ 为 $1$ 时 $B$ 一定为 $1$。其中,$A,B$ 可能形如:
- $x_i$:表示第 $i$ 个变量的值。
- $!x_i$:表示第 $i$ 个变量取反后的值。
例如,如果你构造了 $x_1\rightarrow x_2$,那么表示你规定 $x_1=1$ 时必有 $x_2=1$;如果你构造了 $!x_1\rightarrow x_2$,那么你规定了 $x_1=0$ 时必有 $x_2=1$。你需要找到一种使用不超过 $500$ 组条件来满足题意的方法,或者判定这样的条件组合不可能存在。如果有多组解,输出任意一组均可。
数据保证 $2\leq n\leq 50,v_{i,j}\in\{0,1\}(1\leq i\leq 3,1\leq j\leq n)$。
输入格式
第一行包含一个整数$n(2\leq n\leq 50)$——变量的数量。后面各有三行
描述一项任务。第$k$行包含$n$个空格分隔的整数$v_1^k、v_2^k、\cdots、v_n^k$,其中每个$v_i^k$是$0$或$1$,并表示第$k$-个赋值中变量$x_i$的值。这三项任务都会有所不同。
描述一项任务。第$k$行包含$n$个空格分隔的整数$v_1^k、v_2^k、\cdots、v_n^k$,其中每个$v_i^k$是$0$或$1$,并表示第$k$-个赋值中变量$x_i$的值。这三项任务都会有所不同。
输出格式
如果没有解决方案输出,则输出一行包含整数$−1$的内容。
否则,第一行应该包含一个整数$m$,其中$1\leq m\leq 500$——约束的数量
在您的解决方案中。以下$m$行中的第$k$th应包含第$k$个约束。每个约束
应该是根据以下规则构造的字符串:
-*变量*是形式为“$\texttt”的字符串{x}i$”,其中$i$是介于$1$和$n$之间的整数,包括写入的没有前导零。
-*literal*是由一个变量组成的字符串,该变量前面可能有“$\texttt{!}$”字符。
-*constraint*是形式为“$A\texttt{->}b$”的字符串,其中$A$和$b$都是文字。暗示符号
由“减号”字符和“大于号”字符组成,并且只有一个空格暗示符号前后的字符。
否则,第一行应该包含一个整数$m$,其中$1\leq m\leq 500$——约束的数量
在您的解决方案中。以下$m$行中的第$k$th应包含第$k$个约束。每个约束
应该是根据以下规则构造的字符串:
-*变量*是形式为“$\texttt”的字符串{x}i$”,其中$i$是介于$1$和$n$之间的整数,包括写入的没有前导零。
-*literal*是由一个变量组成的字符串,该变量前面可能有“$\texttt{!}$”字符。
-*constraint*是形式为“$A\texttt{->}b$”的字符串,其中$A$和$b$都是文字。暗示符号
由“减号”字符和“大于号”字符组成,并且只有一个空格暗示符号前后的字符。
输入输出样例
输入 #1
3 0 0 0 0 1 0 1 0 0
输出 #1
3 x1 -> !x2 x3 -> x1 x3 -> x2
输入 #2
4 0 0 1 0 1 0 0 0 1 0 1 1
输出 #2
-1