高中信息技术奥赛翻币问题
山姆大叔发明了一个有趣的翻币游戏。在一个特制的棋盘中有n x m个方格,每个方格中放1枚金币。方格中的金币或正面朝上,或反面朝上。棋盘的每一行的左侧都有一个黑色按钮,可以控制该行中金币的朝向。每按一次黑色按钮,相应行中的所有金币翻转。棋盘每一列上方都有一个白色按钮,用于交换2列中的金币。同时按第i列和第j列的白色按钮,可以交换第i列和第j列的金币,且保持金币在原列中的位置和朝向。 翻币游戏要求游戏者对于金币在棋盘中的一个给定初始布局,通过操纵棋盘上的黑白按钮,达到一确定的目标布局。
编程任务: 对于金币在棋盘中的一个给定初始布局和目标布局,编程计算是否可通过操纵棋盘上的黑白按钮,从初始布局达到目标布局。
数据输入: 由文件coin.in提供输入数据。文件含多个测试数据项。文件的第一行中只有1个整数k,表示共有k个测试数据项。每个测试数据项的第一行中有2个整数n 和m分别表示棋盘的行数和列数。接着的2n行中,前n行表示该测试数据项的初始布局,后n行表示该测试数据项的目标布局。每行有m个符号(+或-)表示该行中金币的朝向。"+"表示金币正面朝上,"-" 表示金币反面朝上。
结果输出: 对每个测试数据项,如果可通过操纵棋盘上的黑白按钮,从初始布局达到目标布局则输?quot;yes", 否则输出"no"。所有结果输出到文件coin.out中。 输入文件示例
2
3 4
- + - +
+ - - +
- - - -
- + - +
+ + - -
- - - -
2 2
- -
- +
+ +
+ +
输出文件示例
yes
no
<