Tyrion的矩阵
Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB
Description
Cersei有一个整数序列A = {A1, A2,..., An}, 0<=ai<=10^9;
Jamie有一个整数序列B = {B1, B2,..., Bm}, 0<=bi<=10^9;
Tyrion根据Ceise提供的序列A和Jamie提供的数列B, 得到了一个n*m的矩阵C, 其中C(i, j) = ai xor bj;
现给你Tyrion的矩阵C, 请你看看Tyrion的矩阵可不可能出错(即存在C(i, j) != ai xor bj).
关于xor运算详细见hint
Input
多组测试数据.
第1行:测试数据组数t;
接下来依次是这t组数据,对于每一组数据:
第1行:n m; n, m含义如上, 有1<=m,n<=1024;
接下来的n行每行m个数, 描述了Tyrion的矩阵C;
第n+2行: 空行.
Output
一共t行对应t组数据;
对于每组数据, 如果你能确定Tyrion的矩阵出错了, 请输出一行"I bet Tyrion made a mistake."(不用输出双引号). 否则输出为两行, 一行输出序列A, 一行为序列B, 同一序列的元素之间用一个空格隔开; 如果可能的A, B序列有多个, 请输出其中序列A的字典序最小的一个.
Sample Input
Original Transformed
2
2 2
0 0
0 12 2
0 1
0 1
Sample Output
Original Transformed
I bet Tyrion made a mistake.
0 0
0 1
Hint
关于按位异或运算xor(在C语言中符号为^):对等长二进制模式下的数,对二进制数的每一位执行逻辑异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. 例如二进制下有:
0 xor 0 = 0; 0 xor 1 = 1; 1 xor 0 = 1; 1 xor 1 = 0;
0101(十进制下值为5) xor 0011(十进制下值为3) = 0110(十进制下值为6)。
Source
“讯飞输入法杯”安徽大学第六届程序设计竞赛
————————————————————忧桑的分割线————————————————————
思路:该题考的是对位运算的理解深度。首先我们简单化这个题目,假设A{ },B{ }都是 0 or 1 组成的,那么A1只有两种可能。
我们假设A1 = 0。之后我们通过给出的C[ ][ ]的第一行经过xor运算得到了B{ }的所有成员。知道了B1,我们通过C[ ][ ]的第一列经过xor运算得到了A{ }的所有成员。这意味着什么?意味着只要我们得知A1,那么所有的数字都清清楚楚明明白白了。
接下来是重点!A1的值我们是假设出来的,毕竟是未知量。但是我们考察一下A1 = 1的情况。(毕竟经过我们之前对问题的简化之后,A1只有这两种取值),我们发现,A1 = 1的时候,整个B{ }的成员全部变成之前的相反数!那么由此可知,A{ }的成员也全部变成相反数。
由此我们知道,在这个情况下,A的取值是0是1都是无所谓的,整个矩阵不会发生改变。这就是位运算当中异或运算的精华部分了。异或运算是强大的:
a ^ b = c; a ^ c = b; b ^ c = a; 
更进一步地理解它,相当于“不进位的加法”:1 + 1 = 0; 1 + 0 = 1; 0 + 0 = 0;
这意味着什么?无论这个数字是几位二进制,xor运互不影响。也就是说,我们简化的情况,恰恰就是任意情况。
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int c[1024][1024], a[1024], b[1024];
int main() {int cas;scanf("%d", &cas);while(cas--) {int n, m, flag = 1;scanf("%d%d", &n, &m);for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)scanf("%d", c[i]+j);a[0] = 0;//没关系,就用0代表所有情况,结果一样for(int j = 0; j < m; j++)b[j] = a[0] ^ c[0][j];//得到b[]for(int i = 1; i < n; i++)a[i] = c[i][0] ^ b[0];//得到a[]for(int i = 1; i < n; i++) {for(int j = 1; j < m; j++)if((a[i]^b[j]) != c[i][j]) {flag = 0;break;}if(!flag)   break;//枚举矩阵,一旦不符合情况,做标记}if(flag) {int i, j;for(i = 0; i < n-1; i++)printf("%d ", a[i]);printf("%d\n", a[i]);for(j = 0; j < m-1; j++)printf("%d ", b[j]);printf("%d\n", b[j]);}else    puts("I bet Tyrion made a mistake.");}return 0;
}

AOJ-AHU-OJ-670 Tyrion的矩阵相关推荐

  1. 北大OJ百练——4075:矩阵旋转(C语言)

    百练的这道题很简单,通过率也达到了86%,所以我也就来贴个代码了...下面是题目: 不过还是说一下我的思路: 这道题对一个新来说,可能是会和矩阵的转置相混淆,这题并不是要我们去求矩阵的转置. 这题,我 ...

  2. 西南民大oj(矩阵快速幂)

    我的名字不可能那么难记 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 16            测试通过 ...

  3. 九度OJ 1193:矩阵转置 (矩阵计算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1673 解决:1132 题目描述: 输入一个N*N的矩阵,将其转置后输出.要求:不得使用任何数组(就地逆置). 输入: 输入的第一行包括一个 ...

  4. XTU—OJ 1258矩阵

    矩阵 题目描述 编写一个程序,将1~n2按行依次填入n×n的矩阵,执行若干条行或者列的循环移动的指令,再将数字按行依次取出. 指令如下: 指令 含义 L x y x行循环左移y次 R x y x行循环 ...

  5. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)E.飞行棋(期望dp+矩阵快速幂)

    题目 飞行棋的规则如下: 1.每名玩家有一个棋子,每个回合可以掷一次骰子. 2.如果使用的骰子为 k面,则这 k面上的点数分别为 1,2,3,-,k,且掷得每种点数的概率均为​. 3.如果当前回合掷得 ...

  6. zzuli OJ 1127: 矩阵乘积

    Description 计算两个矩阵A和B的乘积. Input 第一行三个正整数m.p和n,0<=m,n,p<=10,表示矩阵A是m行p列,矩阵B是p行n列: 接下来的m行是矩阵A的内容, ...

  7. 4128----喵帕斯之矩阵 sdut oj

    喵帕斯之矩阵 莲酱得到了一个矩阵,不过这个矩阵特别丑,莲酱一脸嫌弃.为了让莲酱不再嫌弃这个矩阵,请你把这个矩阵变的更漂亮些. 比如这里有一个比较丑的矩阵 我们通过把对角线的元素进行升序排序,这个矩阵就 ...

  8. C语言实验——求一个3*3矩阵对角线元素之和 (sdut oj)

    C语言实验--求一个3*3矩阵对角线元素之和 Time Limit: 1000MS  Memory Limit: 65536KB Problem Description 给定一个3*3的矩阵,请你求出 ...

  9. C语言实验——矩阵下三角元素之和 (sdut oj)

    C语言实验--矩阵下三角元素之和 Time Limit: 1000MS  Memory Limit: 65536KB Problem Description 输入一个正整数n(1<=n<= ...

  10. 矩阵快速幂 | 北邮OJ | 96. 矩阵幂

    https://vpn.bupt.edu.cn/http/10.105.242.80/problem/p/96/ reference: https://www.cnblogs.com/cmmdc/p/ ...

最新文章

  1. 到底什么是hash?它起什么作用?
  2. 创建git项目的feature分支以及下载特定分支的仓库代码
  3. 算法-----数组-----移除特定元素
  4. win7 64 安装scikit-learn
  5. python3.7安装教程mac_mac中怎么安装python3
  6. centos 修改语言、时区
  7. 计算机辅助相关论文,关于计算机辅助教学的论文
  8. 关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)
  9. mysql集群方案,保准看明白!
  10. unity中使用protobuf-net
  11. ReactiveCocoa 用法实例
  12. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
  13. 最大团问题和最大独立子集
  14. Java权限管理系统源代码下载
  15. c++质数判定及输出质数表
  16. 【整理】SISD、MIMD、SIMD、MISD计算机的体系结构的Flynn分类法
  17. 学校计算机教室 计划总结怎么写,学校信息技术教师的工作总结范文
  18. 字节跳动全员降薪17%,员工都「炸锅了」
  19. ip地址的作用及分类
  20. android 分享纯图片到QQ空间实现方式

热门文章

  1. python中自定义标识符_python标识符
  2. dell服务器双系统切换,戴尔笔记本双系统在不关机的状况下怎么转换另外一个系统?...
  3. windows下GMT绘制矢量图
  4. AiHi+翼次元学院儿童自然感知实践“几米小甜田”+中韧开智“优慧码”| Wit++
  5. WinEdt 9 如何与pdf打开软件(Acrobat)关联
  6. Python利用 Anaconda安装pytorch并测试GPU
  7. 牛客网软通动力软件测试机试_软件测试员工作经验分享?
  8. mtk android 关机充电,MTK充电开机关机过程
  9. [完全版] Windows安装与配置Git cz (commitizen)
  10. win7安装micropython串口驱动失败