CodeForces - 1016D 补零思想
题目连接:
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 补零思想的更多相关文章
- PHP实现实现数字补零格式化
在接支付SDK的时候,第三方回调处理时需要IP,并且IP的需求是:去掉点号,补零到每地址段3位, 如:192168000001 先看看我的实现: <?php $IP = explode ( '. ...
- js整数补零
/* * * 整数前面补零 * * 质朴长存法 * num 要补灵的整数 * n个数,比整数位数多前面自动补零 * **/ function pad(num, n) { var len = num.t ...
- php数字补零的两种方法
在php中有两个函数——至少有两个是否有其他的我还不知道,能够实现数字补零,str_pad(),sprintf()详细如下 str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任 ...
- MySQL 查询某时间段范围内的数据 补零
1.创建基础表 CREATE TABLE num (i INT); INSERT INTO num (i) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9) ...
- Postgresql合并年月日、月份和日期左侧补零
在写一个统计查询的 SQL 语句时,需要根据年.月.日分组,但要求返回的字段是日期格式:yyyy年MM月dd日.刚开始我的做法是返回年.月.日,然后再手动拼接年月日,而且还要判断月份和日期是否为个位数 ...
- C# 左右补零
//不够4位补零 public static string addZero(int val) { string str = val + ""; int strLen = str.L ...
- PHP 字符串两边填充补零
str_pad顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串 例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置) 其中填补后的长度必须是个正整数, ...
- 机器学习进阶-图像基本操作-边界补全操作 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 ...
- 【c++基础】int转string自动补零
前言 使用to_string函数可以将不同类型的数据转换为string类,请参考here和here.如果string的位数固定,如何进行自动补零呢?请看本文实例! 代码 确定位数,to_string ...
随机推荐
- django----利用Form 实现两次密码输入是否一样 ( 局部钩子和全局钩子 )
from django import forms # 导入表单模块 from django.core.exceptions import ValidationError class RegisterF ...
- Nginx详解九:Nginx基础篇之Nginx的访问控制
基于IP的访问控制:http_access_module 不允许指定网段的用户访问:配置语法:deny address | CIDR | unix: | all;默认状态:-配置方法:http.ser ...
- Centos7上配置网络和本地yum方法
配置网络yum源 前提:1.这个系统能上网 2.vim /etc/resolv.conf nameserver 8.8.8.8 nameserver 114.114.114.114 操作如下: 1.m ...
- k-近邻算法-优化约会网站的配对效果
KNN原理 1. 假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系. 2. 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较. a. 计算新 ...
- 点击图片弹出input type=file选择器
<label for="UploadCoverPhoto" class="cursor-pointer"> <img class=" ...
- linux服务器性能——CPU、内存、流量、磁盘使用率的监控
https://blog.csdn.net/u012859748/article/details/72731080
- Java连接MySQL数据库三种方法
好久没有更新博客了!今天利用周目时学习了一下数据库mysql.介绍一下数据库的三种连接方式! 开发工具:Myeclipse MySQL5.6 MySQL连接驱动:mysql-connector-jav ...
- kickstart-E
A题 简答模拟题 #include <iostream> #include<stdio.h> #include <set> #include <algorit ...
- java传值和传引用区别
1. 在java中所有的参数都是传值的,引用符号&的传递是C++中才有的:2. 在java传参中,基本类型(byte--short--int--long--float--double--boo ...
- sed 简单修改配置文件ip地址
sed -i 's/old ip/new ip/g' file.txt