题目链接:http://lx.lanqiao.cn/problem.page?gpid=T126

题意:中文题诶~

思路:显然被翻转了奇数次的硬币为反面朝上,但是本题的数据量很大,所以O(n^2)枚举每个点肯定是不行的...

可以反过来想一下,对于一个坐标 (i, j),显然其只被坐标 (x, y) 影响当且仅当 x 是 i 的因子或者 y 是 j 的因子;

用 f(x) 表示 x 的因子数目,那么坐标 (i, j) 反面朝上的充要条件为 f(i)*f(j) 为奇数,即 f(i) 为奇数并且 f(j) 为奇数;

显然当且仅当 i 为完全平方数的时候 f(i) 为奇数;那么对于 n*m 的矩阵,反面朝上的硬币数目为:

小于等于n的完全平方数的数目 * 小于等于m的完全平方数的数目,即 sqrt(n)*sqrt(m);

注意:这里的n, m范围为1e1000,需要写个大数开方;

代码:

  1. #include<iostream>
  2. #include<string>
  3. #include<string.h>
  4. using namespace std;
  5.  
  6. const int MAXN = 1e3+;
  7. string s1, s2; //n,m;
  8. int len1, len2; //记录开根号后大数的位数;
  9.  
  10. int sqrta[MAXN], sqrtb[MAXN];
  11. int a[MAXN], temp[MAXN], ans[MAXN];
  12.  
  13. int compare(int a[], int b[], int len1, int len2){
  14. if(len1 > len2) return ;
  15. else if(len1 < len2) return -;
  16. for(int i=len1-; i>=; i--){
  17. if(a[i] > b[i]) return ;
  18. else if(a[i] < b[i]) return -;
  19. }
  20. return ;
  21. }
  22.  
  23. //计算A[]*B[],返回答案长度
  24. int multi(int *ans, int A[], int B[], int len1, int len2){
  25. for(int i=; i<=; i++) ans[i]=;//传址数组不能用memset初始化
  26. for(int i=; i<len1; i++){
  27. for(int j=; j<len2; j++){
  28. ans[i+j] += A[i]*B[j];
  29. }
  30. }
  31. for(int i=; i<len1+len2; i++){
  32. ans[i+] += ans[i]/;
  33. ans[i] %= ;
  34. }
  35. int i;
  36. for(i=len1+len2; i>=; i--){
  37. if(ans[i]) break;
  38. }
  39. return i+;
  40. }
  41.  
  42. //对s开方,结果倒序存储于A数组,返回答案长度
  43. int get_sqrt(int *A, string s){
  44. memset(A, , sizeof(A));
  45. memset(a, , sizeof(a));
  46. int len1 = s.size();
  47. int len2 = len1>>;
  48. if(len1 & ) len2 += ;
  49. for(int i=,j=s.size()-; i<s.size(); i++,j--){//翻转
  50. a[j]=s[i]-'';
  51. }
  52. for(int i=len2-; i>=; i--){//从最高位开始
  53. int flag;
  54. int lenMul=;
  55. memset(temp, , sizeof(temp));
  56. while((flag=compare(temp, a, lenMul, len1))==-){
  57. A[i]++;
  58. lenMul=multi(temp, A, A, len2, len2);
  59. }
  60. if(flag==) break;
  61. else if(flag==) A[i]--;
  62. }
  63. return len2;
  64. }
  65.  
  66. int main(void){
  67. memset(sqrta, , sizeof(sqrta));
  68. memset(sqrtb, , sizeof(sqrtb));
  69. cin >> s1 >> s2;
  70. len1 = get_sqrt(sqrta, s1);
  71. len2 = get_sqrt(sqrtb, s2);
  72. int len = multi(ans, sqrta, sqrtb, len1, len2);
  73. for(int i=len-; i>=; i--){
  74. cout << ans[i];
  75. }
  76. cout << endl;
  77. return ;
  78. }

蓝桥杯T126(xjb&大数开方)的更多相关文章

  1. Java中利用BigInteger类进行大数开方

    在Java中有时会用到大数据,基本数据类型的存储范围已经不能满足要求了,如要对10的1000次方的这样一个数据规模的数进行开方运算,很明显不能直接用Math.sqrt()来进行计算,因为已经溢出了. ...

  2. 2012年 蓝桥杯预赛 java 本科 题目

    2012年 蓝桥杯预赛 java 本科 考生须知: l  考试时间为4小时. l  参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...

  3. 蓝桥杯---数独(模拟 || dfs)

    [编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...

  4. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  5. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  6. 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

  7. 算法笔记_199:第二届蓝桥杯软件类决赛真题(C语言本科)

    前言:以下代码部分仅供参考,C语言解答部分全部来自网友,Java语言部分部分参考自网友,对于答案的正确性不能完全保证. 试题1 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. ...

  8. 乘积最大|2018年蓝桥杯B组题解析第十题-fishers

    标题:乘积最大 给定N个整数A1, A2, ... AN.请你从中选出K个数,使其乘积最大. 请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以1000000009的余数. 注意,如果X ...

  9. 2019年第十届蓝桥杯省赛总结(JavaA组)

    //update3.28:省一rank4,莫名进了国赛好神奇.. 记yzm10第一次体验A组(纯粹瞎水). 早闻山东的JavaA组神仙打架,进国赛都成了奢望(往年只有五个名额),因此抱着做分母的心态来 ...

随机推荐

  1. JavaScript:学习笔记(4)——This关键字

    JavaScript:学习笔记(4)——This关键字 以前这篇帖子是关于闭包的,但是我想弄明白的其实是This关键字.JavaScript的this和Java等面向对象语言中的this大不一样,bi ...

  2. 转载:Java知多少(8)类库及其组织结构

    转载地址:http://www.cnblogs.com/Coda/p/4346151.html Java知多少(8)类库及其组织结构 Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个 ...

  3. POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串

    题目链接:https://vjudge.net/problem/POJ-2774 Long Long Message Time Limit: 4000MS   Memory Limit: 131072 ...

  4. zabbix监控系统性能采集指标

                  监控项目                        详细内容                                                       ...

  5. codeforces 558B B. Amr and The Large Array(水题)

    题目链接: B. Amr and The Large Array time limit per test 1 second memory limit per test 256 megabytes in ...

  6. 使用TortoiseGit同步代码到github远程仓库

    1.clone github上的代码仓库的URL 可以用HTTPS,SSH, or Subversion 2.同步push 到远程仓库时 要用 SSH地址,同生成SSH private key ,在g ...

  7. AtCoder Beginner Contest 102

    A - Multiple of 2 and N Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Stat ...

  8. BZOJ_1304_[CQOI2009]叶子的染色_树形DP

    BZOJ_1304_[CQOI2009]叶子的染色_树形DP Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白 ...

  9. BZOJ2006:[NOI2010]超级钢琴

    浅谈\(RMQ\):https://www.cnblogs.com/AKMer/p/10128219.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  10. 记一次keepalived脑裂问题查找

    在自己环境做keepalived+Redis实验时,当重启了备用redies机器后,发现两台redies主机都拿到了VIP [root@redis2 ~]# ip addr list 1: lo: & ...