题目连接:

https://vjudge.net/problem/1753263/origin

其实这道题跟行列式里的分块发有点类似,但也是类似罢了。

主要的思想是每一行,每一列的第一行(或者最后一行)空出,让后根据下列算式:

行异或和:suma = a[1]^a[2]^a[3]...^a[n].

列异或和:sumb = b[1]^b[2]^b[3]...^b[m].

且本题的判断为YES的充要条件是:suma = sumb

有异或和的算法:x^a = b  <==> x^b = a 知:

a[1]^a[2]^a[3] ... ^a[n-1] = a[n]^suma

b[1]^b[2]^b[3] ... ^b[m-1] = = b[m]^sumb

|

|

------------------------| ---x

比如这两条线的交点为x 则要找到一个x(a[n] = b[m])使他满足:

x^a[1]^a[2]^a[3]^ ... ^a[n-1] = b[m]  且

x^b[1]^b[2]^b[3]^ ... ^ b[m-1] = a[n]

也就是 x^suma^a[n] = b[m],

故 x = suma^a[n]^b[m].

AC代码以及步骤解释如下:

#include <iostream>
#include <cstdio>
#include <string.h> using namespace std;
const int MX = +;
int a[MX], b[MX];
int mp[MX][MX]; int main()
{
memset(mp, , sizeof(mp)); //初始化填充0
int n, m;
int suma = , sumb = ;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i)
{
scanf("%d", &a[i]); //行的异或和
suma ^= a[i]; //suma是行的总异或和
}
for(int i = ; i <= m; ++i)
{
scanf("%d", &b[i]); //列的异或和
sumb ^= b[i]; //sumb是列的总异或和
}
if(suma != sumb) //若行的总异或和不等于列的总异或和,则不成立
{
printf("NO\n");
return ;
}
int x = suma^a[n]^b[m]; //根据公式得到x
for(int i = ; i <= n; ++i) mp[i][m] = a[i]; //最后行,列进行初始化
for(int i = ; i <= m; ++i) mp[n][i] = b[i];
mp[n][m] = x; //赋值X
printf("YES\n");
for(int i = ; i <= n; ++i) //打印矩阵
{
for(int j = ; j <= m; ++j)
printf("%d ", mp[i][j]);
printf("\n");
} }

如有疑问,欢迎评论提出!

CodeForces - 1016D 补零思想的更多相关文章

  1. PHP实现实现数字补零格式化

    在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001 先看看我的实现: <?php $IP = explode ( '. ...

  2. js整数补零

    /* * * 整数前面补零 * * 质朴长存法 * num 要补灵的整数 * n个数,比整数位数多前面自动补零 * **/ function pad(num, n) { var len = num.t ...

  3. php数字补零的两种方法

    在php中有两个函数——至少有两个是否有其他的我还不知道,能够实现数字补零,str_pad(),sprintf()详细如下 str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任 ...

  4. MySQL 查询某时间段范围内的数据 补零

    1.创建基础表 CREATE TABLE num (i INT); INSERT INTO num (i) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9) ...

  5. Postgresql合并年月日、月份和日期左侧补零

    在写一个统计查询的 SQL 语句时,需要根据年.月.日分组,但要求返回的字段是日期格式:yyyy年MM月dd日.刚开始我的做法是返回年.月.日,然后再手动拼接年月日,而且还要判断月份和日期是否为个位数 ...

  6. C# 左右补零

    //不够4位补零 public static string addZero(int val) { string str = val + ""; int strLen = str.L ...

  7. PHP 字符串两边填充补零

    str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置) 其中填补后的长度必须是个正整数, ...

  8. 机器学习进阶-图像基本操作-边界补全操作 1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 进行边界的补零操作 2.cv2.BORDER_REPLICATE(边界补零复制操作)...

    1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 参数说明: i ...

  9. 【c++基础】int转string自动补零

    前言 使用to_string函数可以将不同类型的数据转换为string类,请参考here和here.如果string的位数固定,如何进行自动补零呢?请看本文实例! 代码 确定位数,to_string ...

随机推荐

  1. Python实现switch效果

    Java中有switch这个东东有的地方使用switch感觉还挺好使,但是Python没有提供switch这个东东,下面我们想办法来完成类似Java和C里面的那种switch效果. Java示例代码: ...

  2. C++ shut down a computer

    前阵子有朋友问我,怎么用C语言写一个小程序,控制电脑关机.这个我真的不懂,这几天闲着,就上网搜了搜,整理一下. IDE: Code::Blocks 16.01 操作系统:Windows 7 x64 # ...

  3. Springboot+MyBatis+JPA集成

      1.前言 Springboot最近可谓是非常的火,本人也在项目中尝到了甜头.之前一直使用Springboot+JPA,用了一段时间发现JPA不是太灵活,也有可能是我不精通JPA,总之为了多学学Sp ...

  4. ubuntu16.04安装skype

    ubuntu16.04安装skype 一句命令搞定 wget https://repo.skype.com/latest/skypeforlinux-64.deb && sudo dp ...

  5. 配置frp

    一.下载 下载地址:https://github.com/fatedier/frp/releases 下载linux_amd64的,如果是32位系统就下载linux_386 二.安装 有公网IP的服务 ...

  6. springboot快速使用

    1.编写SpringConfig 用于实例化Spring容器 @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件 @Bean // 通过该注解来表明是 ...

  7. MyBatis - 4.动态SQL

    动态 SQL是MyBatis强大特性之一.极大的简化我们拼装SQL的操作. 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似. MyBatis 采用功能强大的基于 OGNL ...

  8. Android Https双向认证 + GRPC

    keywords:android https 双向认证android GRPC https 双向认证 ManagedChannel channel = OkHttpChannelBuilder.for ...

  9. QQ登录用到的URL

    //QQ 登陆页面的URL,client_id就是APP ID,会返回一个codehttps://graph.qq.com/oauth2.0/authorize?response_type=code& ...

  10. mysql恢复ibd文件

    1.将原表删除,包括ibd和frm文件 2.重新创建表结构. 3.丢弃表空间 alter table tableName discard tablespace; 4.将要恢复的ibd文件拷贝到数据库目 ...