标题:矩阵翻硬币
小明先把硬币摆成了一个 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消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。 注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。
(没读懂题,找规律一直是弱鸡。。) 参考博客:代码(debug半天放弃了,sqrtStr函数实在不知道哪儿没写对。)
#include#include #include #include #include #include #define LL long longusing namespace std;string strmul(string s1,string s2){ int i,j;// cout< < =0;i--) if(num[i]!=0) break; for(j=i;j>=0;j--) res+=(num[j]+'0'); return res;}//在s1后添num0个0,与s2作比较 int cmpstr(string s1,string s2,int num0){ int len1=s1.length(); int len2=s2.length(); if(len2>len1+num0) return 0; if(len2 s2[i]-'0') return 1; if(s1[i]-'0' >s1>>s2; cout< <
//弱死了。。。。