历届试题 矩阵翻硬币  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
小明先把硬币摆成了一个 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次方)。


分析:1、首先,看到数据的规模,肯定不能先建立一个二维表格,再对每一个硬币进行Q 操作

   2、没有头绪的情况下,看了别人的解法

   3、从整体来看,一个硬币只有被翻了奇数次,最终状态才会与最初状态不同

  4、一个位置的硬币怎样才能被翻奇数次呢?我们先看一维的情况下,一个1 * 9 的情形,在第一个位置的

时候,只有位置1的硬币进行Q操作(没有列操作),才能将1位置的硬币进行翻一次,2位置硬币根据Q 操作(没有列操作),位置1和2的硬币根据Q操作(没有列操作),能将2位置的硬币进行翻两次, 3位置的硬币可以被翻两次.......也就是说位置x,只有x的约数根据Q操作,才能到达x位置

位 置        1 2 3 4 5 6 7 8 9
被翻次数 1 2 2 3 2 4 2 4 3

   可以看出,1、4、9位置的硬币被翻了奇数次,1、4、9他们的约数的个数都是奇数个,那么什么样的 数,他们的约数才有奇数个那?答案是完全平方数(证明在后面)。

   5、从1到n,有几个平方数就有几个我们要找的硬币数,即(int)sqrt(n)个,

数字  1 2 3 4 5 6 7 8 9
个数 1 1 1 2 2 2 2 2 3

  6、现在考虑一下二维N*M的情况,在P(x,y)位置,在纵坐标y不变的情况下,x有几个约数,就有几 个(记为s1个)位置的硬币可以根据Q操作到达位置P,同理,在横坐标x不变情况下,y有几个约数 就有 几个(记为s2个)位置的硬币根据Q操作到达P位置,s1*s2必须为奇数才能为我们要找的,即s 1 和 s2 都得为奇数,即要在满足一维的情况下,才能满足二维。那么总的个数就是sqrt(N)* sqrt( M)个

7、再然后就是 大数问题了

证明:只有平方数有奇数个约数

充分性
1.n=1时正约数1个,是奇数
2.n>1时
n^2的约数:1...n...n^2
1和n之间每多一个约数,例如m,那么n到n^2之间就会多一个约数n^2/m
就是说除了这三个约数,其他的约数是成对出现的,也就是说约数的个数
是3+偶数,结果必为奇数

必要性:
1.如果一个数的公约数是1和他本身,那它就是质数,肯定不是完全平方数
2.如果一个数m的公约数是1和他本身m,还有其他的公约数,我们设其中一个数为p,那么必定存在一个约数m/p
也就是说公约数是成对出现的,除非这两个数相等,也就是同一个数,否则公约数的个数就肯定是偶数

所以p是m的完全平方根时,公约数个数是奇数,
p不是m的完全平方根时,公约数个数是偶数。

 证明来自 http://wenda.so.com/q/1365463972067750?src=180

# include <iostream>
# include <string>
# include <math.h>using namespace std;string str_mul(string a,string b)
{string result="";int len1=a.length();int len2=b.length();int i,j;int num[500]={0};for(i=0;i<len1;i++)for(j=0;j<len2;j++){num[len1-1+len2-1-i-j]=num[len1-1+len2-1-i-j]+(a[i]-'0')*(b[j]-'0');}for(i=0;i<len1+len2;i++){num[i+1]=num[i+1]+num[i]/10;num[i]=num[i]%10;}for(i=len1+len2-1;i>=0;i--){if(num[i]!=0)break;}for(;i>=0;i--){result=result+(char)(num[i]+'0');}return result;
}
int strCmp(string a,string b,int pos)
{int i;if(a.length()+pos>b.length())return 1;if(a.length()+pos<b.length())return 0;if(a.length()+pos==b.length()){for(i=0;i<a.length();i++){if(a[i]<b[i])return 0;if(a[i]==b[i])continue;if(a[i]>b[i])return 1;}}
}
string str_sqrt(string a)
{string result="";int i;int len=a.length();if(len%2==0)len=len/2;elselen=len/2+1;for(i=0;i<len;i++){result=result+'0';while(strCmp(str_mul(result,result),a,2*(len-1-i))!=1){if(result[i]==':')break;result[i]++;}result[i]--;}return result;
}
int main(void)
{
//  freopen("in.txt","r",stdin);string n,m;cin >> n >> m;cout << str_mul(str_sqrt(n),str_sqrt(m))<<endl;return 0;
}

蓝桥杯--矩阵翻硬币相关推荐

  1. 大数开根号(蓝桥杯-矩阵翻硬币)

    在蓝桥上面交了个题目,测试了java和C++的速度发现差距还是蛮大的,java代码相对比较少但是时间和内存差不多就是十倍的差距了. 上C++版本代码: #include <cstring> ...

  2. 蓝桥杯:翻硬币(贪心)

    历届试题 翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反 ...

  3. 蓝桥杯试题:矩阵翻硬币

    矩阵翻硬币 这是蓝桥杯的一道练习题,题目如下: 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬币进行 Q 操作的定义:将所 ...

  4. 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的硬 ...

  5. 【蓝桥杯】历届试题 矩阵翻硬币

    历届试题 矩阵翻硬币 ----------------------------------------------------痞子小小崔 时间限制:1.0s 内存限制:256.0MB 问题描述 小明先 ...

  6. 蓝桥杯历届试题----矩阵翻硬币

    矩阵翻硬币 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵.随后,小明对每一个硬币分别进行一次 Q 操作.对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进 ...

  7. 【蓝桥杯题解】矩阵翻硬币

    历届试题 矩阵翻硬币 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行第y列的 ...

  8. 历届试题 矩阵翻硬币

    历届试题 矩阵翻硬币   时间限制:1.0s   内存限制:256.0MB      问题描述 小明先把硬币摆成了一个 n 行 m 列的矩阵. 随后,小明对每一个硬币分别进行一次 Q 操作. 对第x行 ...

  9. 蓝桥杯矩阵翻转java_矩阵翻转硬币 蓝桥杯

    解题思路分析:           n=2, m=3 翻硬币过程(1代表正面,0代表反面): step 1 : step 2 : 当(x, y) = (1, 1)时, (i * x,  j * y)将 ...

最新文章

  1. 《城市大脑全球标准研究报告2020》摘要内容
  2. TD-SCDMA向HSPA+的演进
  3. 2040张图片训练出的ViT,准确率96.7%,连迁移性能都令人惊讶 | 南京大学
  4. html函数属性的赋予,你可以将javascript函数名称设置为html属性吗?
  5. DMLC深盟分布式深度机器学习开源平台解析
  6. 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld
  7. Windows2000下Api函数的拦截分析
  8. Java多线程复习_Java多线程复习
  9. python自动化_Python 实现Excel自动化办公上
  10. 【需求工程】需求获取
  11. microsoft query sql引用单元格_Microsoft.Office.Interop.Excel操作Excel拾遗
  12. 谷歌浏览器修改CSS和js后同步保存到文件中 (译)
  13. 如何把APP加到HTML,如何将 Microsoft 服务添加到你的应用 (HTML)
  14. 9. PHP 字符串
  15. java开源博客系统solo_15日开源软件更新,推荐JAVA博客系统 Solo
  16. 为什么root下不能使用passwd命令_Linux:CentOS 7中常用的基础命令
  17. sap系统和服务器的关系,erp系统和sap系统的区别
  18. win7/8/10,使用WSD不能打印
  19. 使用<details>标签在网页里面添加脚注
  20. zip解压缩jar包,像jar包中add文件

热门文章

  1. 2021-03-11 舒尔特方格 python3 pyqt5
  2. Java 使用IE浏览器下载文件,文件名乱码问题
  3. Android 如何进入Android工程模式
  4. 甲骨文oracle测试面试记录
  5. 小学计算机兴趣班活动方案,兴趣班活动方案
  6. vc messagebox怎么选择选项_亚马逊VC卖家被迫转向第三方卖家,下一步要怎么做?...
  7. 从用户真实需求出发,星环数据云平台 TDC 2.5 版本发布
  8. 数据分析 深入挖掘QQ空间的商业价值
  9. 01-Httprunner接口自动化第一篇:应用环境与安装
  10. 「TCG 规范解读」初识 TPM 的应用环境