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 ...
随机推荐
- Python属性(@property)
创建用于计算机的属性 在Python中,可以通过@property(装饰器)将一个方法转换为属性,从而实现用于计算的属性.将方法转换为属性后,可以直接通过方法名来访问方法,而不需要再添加一对小括号&q ...
- ActiveSync的Settings命令
在[MS-ASCMD]中,Settings命令的功能这样定义的: The Settings command also sends device information to ...
- lsattr chattr 文件安全设置
[root@test_android_client_download xianlaigames]# lsattr -------------e- ./jilinmj.apk[root@test_and ...
- Java开发环境笔记
在配置环境变量中 设置Java_home: 一是为了方便引用,比如,jdk安装在c:\jdk16.0目录里,则设置java_home为该目录路径,那么以后要使用这个路径的时候,只需输入%java_ho ...
- SQL Server等待
等待大概分为3类:资源等待.队列等待.外部等待 过滤掉系统相关的等待类型的语句.(查看常用的等待信息) SELECT wait_type , signal_wait_time_ms , wait_ti ...
- python---顺序查找,二分查找
比较熟悉了. 但要注意细节, 二分查找时,普通方法mid处理,递归时,mid处理. # coding = utf-8 def sequential_search(a_list, item): pos ...
- C#学习-静态
有提过类的成员,有字段.属性.方法和构造函数等,也可以使用static关键字将其声明为类的静态成员. 静态成员属于类级别的概念,它不属于类的实例. 可以使用static关键字来声明静态字段,静态字段与 ...
- poshytip基本使用
js基本调用方法 $("#tips").poshytip({ content: $this.text(), alignTo: 'target', alignX: direction ...
- Java基础知识➣泛型整理(四)
概述 泛型的本质是参数化类型,使用同一套代码来满足不同数据类型的业务需要,提高代码的执行效率,使代码简单明了. 泛型方法 该方法在调用时可以接收不同类型的参数.根据传递给泛型方法的参数类型,编译器适当 ...
- 【CF809D】Hitchhiking in the Baltic States
题意: 给你n个区间[li,ri],让你选出从中一个子序列,然后在子序列的每个区间里都选择一个tj,满足t1<t2<...<tlent1<t2<...<tlen.最 ...