题面在这里!

很明显二进制每一位都是无关的,所以可以先把原问题简化:给矩阵中的每个位置填入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. 去除UITableView多余的seperator

    UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; [tableView setTableFooterView:v]; [v release] ...

  2. css3全屏背景显示

    background:url(zhongyi2.png) no-repeat center center fixed;/* -webkit-background-size:cover; -moz-ba ...

  3. 爬虫--Scrapy之Downloader Middleware

    下载器中间件(Downloader Middleware) 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和respons ...

  4. C# 加密解密以及sha256不可逆加密案例

    class Program { static void Main(string[] args) { string aa = "身份证"; string bb = "key ...

  5. Minimum Palindromic Factorization(最少回文串分割)

    Minimum Palindromic Factorization(最少回文串分割) 以下内容大部分(可以说除了关于回文树的部分)来自论文A Subquadratic Algorithm for Mi ...

  6. FusionCharts 用法心得

    现在主流的很多jQuery+js结合的图表展示插件,有HighCharts,ECharts等等,今天我们先来了解一下FusionCharts,也是一个非常不错的图表制作工具.希望我的同事以及其他需要帮 ...

  7. CPU运行时间——time

    用途说明time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情).但是今天我通过查看time命令的手册页,发现它能做的不仅仅是测量运行时间,还可以测量内存 ...

  8. poj 2337(单向欧拉路的判断以及输出)

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11648   Accepted: 3036 Descrip ...

  9. hdu 3573(数学+贪心)

    Buy Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. SGU 206. Roads

    206. Roads time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard output: sta ...