题面在这里!

很明显二进制每一位都是无关的,所以可以先把原问题简化:给矩阵中的每个位置填入0/1,使得特定行/列有奇数个1,其他行/列有偶数个1。

一个比较好想的方法是对行和列 列出 n+m 个异或方程,其中有 n*m 个变量,随便求出一组解就好了(如果有的话)。

但这个貌似并不是很好写。。。

可以把解异或方程转化成 在一个完全二分图(左n个点,右m个点)上选边,每个点可以是黑的(对应行/列要求有奇数个1)或者白的(反之),每选一条边就要把两端的点的黑白性颠倒。

然后发现这是一个经典问题,显然选的边可以只存在与随便一颗生成树上,因为加入后可以成环的边不会影响答案。

并且可以发现无解当且仅当有奇数个黑点,因为选一条边不会改变图中黑点个数的奇偶性,而我们要求最后所有点都消成白点。

其他情况都有解,这里只从操作意义上解释为什么(但其实方程组的证明也很简单,因为你考虑一下把所有n+m行异或起来,会得到一个全空行,也就是有一个方程其实是没有用的,于是总是有解的)。

考虑一种构造方案:我们对这颗随便找的生成树做一遍dfs,先把子树中的其他节点都处理成白的之后,如果当前节点是黑的,那么就选它到它father的边;否则不选。

显然这样做总能保证除了根的其他节点都会变成白色,但又因为选一条边不会改变图中黑点的奇偶性,并且已经保证有偶数个黑点了,所以最后根也一定是白色的。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define pb push_back
const int N=105; vector<int> g[N*2];
int n,m,a[N*2],ans[N][N],Xor[N*2],now; inline void pt(int x,int y){
if(x>y) swap(x,y);
ans[x][y-n]|=now;
} void dfs(int x,int fa){
for(int i:g[x]) if(i!=fa){
dfs(i,x);
if(Xor[i]) Xor[x]^=now,pt(x,i);
}
} int main(){
scanf("%d%d",&n,&m),m+=n;
for(int i=1;i<=m;i++) scanf("%d",a+i); for(int i=n+1;i<=m;i++) g[1].pb(i),g[i].pb(1);
for(int i=2;i<=n;i++) g[i].pb(n+1),g[n+1].pb(i); for(now=1;now<=1e9;now<<=1){
for(int i=1;i<=m;i++) Xor[i]=a[i]&now;
dfs(1,0);
if(Xor[1]){ puts("NO"); return 0;}
} puts("YES"),m-=n; for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) printf("%d ",ans[i][j]);
puts("");
} return 0;
}

  

CodeForces - 1016D Vasya And The Matrix的更多相关文章

  1. Educational Codeforces Round 48 (Rated for Div. 2) D 1016D Vasya And The Matrix (构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. 1016D.Vasya And The Matrix#矩阵存在

    题目出处:http://codeforces.com/contest/1016/problem/D #include<iostream> #define ll long long int ...

  3. Vasya And The Matrix CodeForces - 1016D (思维+构造)

    Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the ma ...

  4. D. Vasya And The Matrix(Educational Codeforces Round 48)

    D. Vasya And The Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandar ...

  5. CF 1042 E. Vasya and Magic Matrix

    E. Vasya and Magic Matrix http://codeforces.com/contest/1042/problem/E 题意: 一个n*m的矩阵,每个位置有一个元素,给定一个起点 ...

  6. codeforces1016 D. Vasya And The Matrix(思维+神奇构造)

    D. Vasya And The Matrix time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26

    /* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...

  8. 【Educational Codeforces Round 48 (Rated for Div. 2) D】Vasya And The Matrix

    [链接] 我是链接,点我呀:) [题意] 告诉你每一行.每一列的异或和. 让你求出一个符合要求的原矩阵. [题解] 显然应该有 a1^a2^....^an = b1^b2^....^bn 也即两边同时 ...

  9. Educational Codeforces Round 48 D Vasya And The Matrix

    EDU #48 D 题意:给定一个矩阵,已知每一行和每一列上数字的异或和,问矩阵上的数字是多少,不存在则输出NO. 思路:构造题,可以考虑只填最后一行,和最后一列,其中(n,m)要特判一下.其他格子给 ...

随机推荐

  1. 关于linux的一些基础知识

    一.基础 1.linux所有内容以文件形式保存,包括硬件. 2.linux 不区分扩展名,靠权限区分.   #但是,约定 .sh脚本文件  .conf配置文件. 3.-rw-r--r--        ...

  2. 2017ACM暑期多校联合训练 - Team 2 1008 HDU 6052 To my boyfriend (数学 模拟)

    题目链接 Problem Description Dear Liao I never forget the moment I met with you. You carefully asked me: ...

  3. 如何写出优雅的js以及js特殊技巧

    由于代码和解释都写在了github的readme内部,这里就直接附上github:https://github.com/jiangzhenfei/pretty-js/tree/master

  4. VC改变CListCtrl 表格中文字颜色,和背景颜色。

    (1)首先需要自定义一个类,派生自CListCtrl.如下图: (2)然后在派生类的头文件中声明一个成员函数,如下图: (3)在源文件中实现该成员方法,如图: (4)在源文件中做消息映射,如图: 这时 ...

  5. c++中指针常量,常指针,指向常量的常指针区分

    const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...

  6. DAY1-GO初识(概述)

    一.概述 1.特征 1.1.语法简单:规则严谨.保留指针.但默认阻止指针运算.将切片和字典作为内置类型.更好的维护性: 1.2.并发模型:运行时用GOroutine,一个关键字.简单而自然:搭配cha ...

  7. 数据结构与算法之KMP 字符串匹配

    举例来说,有一个字符串"DSFFKFJD KFJLKFDLJFJ IWWJKJFJIA",我想知道,里面是否包含另一个字符串"JFJI",有的话就返回在原字符串 ...

  8. openjudge-NOI 2.6-2718 移动路线

    题目链接:http://noi.openjudge.cn/ch0206/2718/ 题解: 递推,某一个点只能从其左边或者下边走过来 f[i][j]存储(i,j)这个点上的结果,即f[i][j]=f[ ...

  9. laravel5.1--数据库操作

    1 配置信息 1.1配置目录: config/database.php 1.2配置多个数据库 //默认的数据库 'mysql' => [ 'driver' => 'mysql', 'hos ...

  10. Binary Tree Zigzag Level Order Traversal——关于广度优先的经典面试题

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...