问题描述
小明先把硬币摆成了一个 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;
  对于100%的数据,n、m <= 10^1000(10的1000次方)。

【解题思路】
详细分析  这个是别人的分析,我就记录一下我的代码,要我分析反正我是分析不出来的╮(╯▽╰)╭

#include<iostream>
#include<string>
#include<cstring>
using namespace std;string mul(string str1,string str2)  //大数相乘
{int len1 = str1.length();int len2 = str2.length();int num[1005];string res="";memset(num,0,sizeof(num));int i,j;for(i=len1-1;i>=0;i--){for(j=len2-1;j>=0;j--)  //按位相乘str[i]*str[j]  len1-1-i+len2-1-j控制末尾0的个数num[len1-1-i+len2-1-j] = num[len1-1-i+len2-1-j]+(str1[i]-'0')*(str2[j]-'0');}for(i=0;i<len1+len2;i++)  //进位{if(num[i]>=10){num[i+1] = num[i+1]+num[i]/10;num[i] = num[i]%10;}}for(i=len1+len2-1;i>=0;i--)  //将最前面的0减去if(num[i] != 0)break;for(;i>=0;i--)res += num[i]+'0';return res;
}int compare(string str1,string str2,int num)  //大数比较
{int len1 = str1.length();int len2 = str2.length();
//  cout<<"len1:"<<len1<<" "<<"len2:"<<len2<<" "<<"num:"<<num<<" "<<endl;
//  cout<<"str1:"<<str1<<" "<<"str2:"<<str2<<" "<<endl;if(len1 > len2+num)return 1;else if(len1 < len2+num)return -1;else  //len1 == len2+num{for(int i=0;i<len2;i++){if(str1[i] > str2[i]){return 1;}else if(str1[i] < str2[i]){return -1;}}}return 1;
}string root(string str)  //大数开方
{int len = str.length();string res="";int num,i,j,flag;if(len%2==0)num = len/2-1;else num = len/2;for(i=0;i<num+1;i++){res += '0';for(j=1;j<10;j++){res[i] = j+'0';
//          cout<<"res:"<<res;flag = compare(str,mul(res,res),2*(num-i));
//          cout<<" "<<"flag:"<<flag<<endl;if(flag == -1)  //res平方后比str大{j = j-1;res[i] = j+'0';break;}}}return res;
}int main()
{string str1,str2;cin>>str1>>str2;string res;str1 = root(str1);str2 = root(str2);res = mul(str1,str2);cout<<res<<endl;return 0;
}

蓝桥杯 历届试题 矩阵翻硬币(大数)相关推荐

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

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

  2. Java实现 蓝桥杯 历届试题 矩阵翻硬币

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

  3. 蓝桥杯历届试题:翻硬币——Java实现

    题目: 以下是输入输出格式: 这里我也没多想,看到了输入的字符串不是固定的,但是我们需要对其进行元素的操作,马上就想到了Java中字符串和字符数组之间的转换--toCharArray()方法. 以下是 ...

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

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

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

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

  6. 历届试题 矩阵翻硬币

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

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

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

  8. 试题 历届试题 矩阵翻硬币

    原题链接:试题 历届试题 翻硬币 1.懒得样式,截图如下 2.思路: 首先,同时翻动两个相邻的硬币,这就意味着不同的硬币的个数一定是偶数个,如果是奇数个永远也达不到目标状态. 其次,顺序翻转就是翻转次 ...

  9. 蓝桥 历届试题 矩阵翻硬币 JAVA

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

最新文章

  1. Android的Adapter用法总结
  2. [转]你在修佛,还是在修魔
  3. nova hypervisor接口添加host_ip字段
  4. Python-可视化Evoked数据
  5. oracle对日期date类型操作的函数
  6. C++面试题:list和vector有什么区别
  7. 全注解怎么使用分页插件_分页插件使用的方式
  8. JAVA面试题(part7)--Integer类
  9. nginx负载均衡器处理session共享的几种方法(转)
  10. python基础之Day20part1
  11. 利用FbinstTool制作多系统(winPE+Ubuntu+CDLinux)启动U盘
  12. stm32 USB HID多点触摸屏上报安卓触摸信号
  13. [wirteup] unctf-web-can_you_hacked_me
  14. 银河麒麟禁止抓屏printScreen
  15. 全程无尿点,死磕前端~
  16. 不安装DBC2000安装架设传奇服务端的方法
  17. 一个关于LSTM生成歌词的练习
  18. 聊一聊DNS劫持那些事
  19. 利用CSV 引擎加载数据
  20. cad要素转ppt可编辑emf——城市规划(六)

热门文章

  1. 解决 Chrome 主页被 duba 劫持问题——干掉钩子
  2. ASEMI整流桥ABS10的参数怎么看,ABS10的作用是什么?
  3. Ten 使用ssh服务管理远程主机
  4. 不要讨要共享单车押金了,没用
  5. (C语言)找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。存在则输出坐标;否则输出 -1.
  6. JFinal解决IE浏览器下载问题
  7. WMS多仓库调拨模块设计
  8. 简单免费内网穿透教程,利用树莓派实现低成本建站 无需公网
  9. H. Loneliness
  10. matlab藻类细胞结构,藻类细胞生物学实验室