第五届蓝桥杯Java B——矩阵翻硬币

栏目: Java · 发布时间: 5年前

内容简介:小明先把硬币摆成了一个 n 行 m 列的矩阵。随后,小明对每一个硬币分别进行一次 Q 操作。对第x行第y列的硬币进行 Q 操作的定义:将所有第 i

小明先把硬币摆成了一个 n 行 m 列的矩阵。

随后,小明对每一个硬币分别进行一次 Q 操作。

对第x行第y列的硬币进行 Q 操作的定义:将所有第 i x 行,第 j y 列的硬币进行翻转。

其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。

当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。

小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。

聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。

【数据格式】

输入数据包含一行,两个正整数 n m,含义见题目描述。

输出一个正整数,表示最开始有多少枚硬币是反面朝上的。

【样例输入】

2 3

【样例输出】

1

【数据规模】

对于10%的数据,n、m <= 10^3;

对于20%的数据,n、m <= 10^7;

对于40%的数据,n、m <= 10^15;

对于10%的数据,n、m <= 10^1000(10的1000次方)。

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 2000ms

思路

最后一道编程题,还是有点水平的,还是要好好写写题解

考虑一般的情况,对于某个矩阵位置$(x,y)$反向回推,$(x,y)$初始状态是正面向上的,经过若干次翻转行,列以后导致他变成反面向上,很明显,这个"若干次",一定是奇数次

$x$的因子假设为$x_1,x_2...x_p$,$y$的因子假设为$y_1,y_2...y_q$,这些因子两两任意组合就能构成$p\times q$个点。

也就是说,如果$x$的因子个数$p$乘以$y$的因子个数$q$为奇数,那么$(x,y)$就是反面朝上的了。因为只有奇数$\times$奇数$=$奇数,所以要求$x$的因子个数和$y$的因子个数必须都为奇数。又因为 只有完全平方数的因子个数为奇数 ,所以问题就转化成了,判断$x$和$y$是否同时是完全平方数。到这里已经可以拿20%的分了

由于$n$和$m$的范围太大,所以不能每个坐标去枚举是否是完全平方数。这里就要用到另一个重要的性质: $1-n$内完全平方数的个数为$\sqrt{n}$个


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to MongoDB

The Definitive Guide to MongoDB

Peter Membrey、Wouter Thielen / Apress / 2010-08-26 / USD 44.99

MongoDB, a cross-platform NoSQL database, is the fastest-growing new database in the world. MongoDB provides a rich document orientated structure with dynamic queries that you’ll recognize from RDMBS ......一起来看看 《The Definitive Guide to MongoDB》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具